我的控制器中有以下代码:
for($i=0; $i<$number_of_tourists; $i++) {
$tourist = Tourist::updateOrCreate(['doc_number' => $request['doc_number'][$i]],
$tourist_to_update);
}
Run Code Online (Sandbox Code Playgroud)
每次"updateOrCreate"有效时,它会执行以下三项操作之一:
1)更新模型instanse OR
2)创建并保存新的OR
3)保持一切不变(如果已存在具有此类值的模型).
我需要检查'updateOrCreate'是否已完成1(更新),然后执行一些代码.
我该怎么做?
先感谢您!
我有一张带有'酒店'栏的桌子.该项目是在Laravel 5.4中创建的,因此我使用了迁移.
$table->string('hotel', 50);
Run Code Online (Sandbox Code Playgroud)
这是MYSQL VARCHAR(50).它工作得很好,因为在我开发时,我使用的短名称如"HILTON NEW YORK 5 "*.
现在该项目正在进行生产,客户询问他们为什么不能输入长酒店名称.我用这样一个模拟的酒店名称测试了它"长长很长很长很长很长很长的酒店名称5星"
它给了我一个错误:
"SQLSTATE [22001]:字符串数据,右截断:1406对于第1行的列'hotel',数据太长"
我在Sequel Pro中打开了数据库并进行了更改
在每次更改之后,我使用相同的"长长多长多长多长很长且非常非常长的酒店名称5开始"进行测试并得到相同的错误(见上文).
我已经检查了列的类型
SHOW FIELDS FROM table_name
Run Code Online (Sandbox Code Playgroud)
它给了我
领域| 类型
酒店| 文本
所以字段的类型确实是"文本"(65 535个字符).
也许它与Laravel Migration文件(见上文)有某种联系,我在开始时设置了VARCHAR(50)?但我无法在生产中重新运行迁移,因为该表现在有数据.
非常感谢任何帮助.
更新: 我发现它实际上在DB中保存了这么长的酒店名称.但是每次提交表单后用户仍然会遇到这个恼人的错误......
我注意到在Laravel的Controller中写作:
dd($array)
Run Code Online (Sandbox Code Playgroud)
在Chrome Developer Tools(chome 61.0.3163.91 64位,MAC OS)中输出一个未结构化的数组视图.
我有'错误的记忆'吗?
或者,如果dd()确实在devtools中输出结构化数组,我该如何将它带回来?
也许这是由于我对这些领域缺乏知识而引起的一个更普遍的MySQL或PHP问题,但是...
所以我在Laravel 5.4上有一个应用程序,数据库是MySQL 5.7.17
我在talbe中有一列,是通过迁移创建的:
$table->float('operator_price', 9, 2)->nullable()->change();
Run Code Online (Sandbox Code Playgroud)
(根据Laravel docs的说法,这应意味着列的类型为“ FLOAT”,总位数为9,小数点后为2)
当用户在表单字段中输入1000.25并保存-它保存为“ 1000.25”时,
但是,如果用户输入10000.25-它会另存为“ 10000.2”。
因此,如果数字超过9999,则会截断最后一位数字。
可能是什么原因,我该如何解决?
谢谢。
更新:我已经从巡回演出中显示了栏目;
它显示列“ operator_price”的类型为“ float”:
这是一个为什么的问题,而不是操作方法:)
我已将查询巨石分配给变量$ query:
$query = table::where(['id'=>1, 'this_version'=> 1]);
$versions['slug1'] = $query->select('tourist_id', 'tourist_version')->get()->toArray();
print_r($versions);
Run Code Online (Sandbox Code Playgroud)
输出带有2(!)子数组的数组:
Array
(
[slug1] => Array
(
[0] => Array
(
[tourist_id] => 1
[tourist_version] => 1
)
[1] => Array
(
[tourist_id] => 2
[tourist_version] => 1
)
)
)
Run Code Online (Sandbox Code Playgroud)
但是,如果我在$ query声明和获取$ version [2]数组之间使用$ query添加另一行,我的$ version [2]输出将缩短为一维数组:
$query = previoustour2_tourist::where(['tour2_id'=>$tour->id, 'this_version'=> 1]);
// Added line:
$versions['slug0'] = $query->select('version_created')->first()->version_created;
//
$versions['slug1'] = $query->select('tourist_id', 'tourist_version')->get()->toArray();
print_r($versions);
Run Code Online (Sandbox Code Playgroud)
输出(注意slug1现在只有1个嵌套数组):
Array
(
[slug0] => 2017-08-08 08:25:26
[slug1] => Array
(
[0] …
Run Code Online (Sandbox Code Playgroud) #include <algorithm>
#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
int main() {
int steps;
map<string, string> countries;
cin >> steps;
for (int i = 0; i < steps; ++i) {
string command;
cin >> command;
if(command == "CHANGE_CAPITAL") {
for(auto& s : countries) {
string& old_country = s.first;
string& old_capital = s.second;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你好!当我尝试编译此代码时,它给了我错误:
'basic_string <...>'类型的绑定值引用类型'basic_string <...>'drop'const'限定符
对于字符串
string& old_country = s.first;
Run Code Online (Sandbox Code Playgroud)
为什么会这样?(它不会为下一个字符串提供此错误 - 我通过引用来协助"s.second").
编译器是ISO C++ 1y(-std = c ++ 1y).
谢谢.
我有这个代码:
<?php
$attribute = 'name';
$value = 'John';
print_r("$attribute$value");
Run Code Online (Sandbox Code Playgroud)
它输出:
nameJohn
Run Code Online (Sandbox Code Playgroud)
我想继续使用""(双引号)输出:
name_value: John
Run Code Online (Sandbox Code Playgroud)
我试过了:
print_r("$attribute_value: $value");
Run Code Online (Sandbox Code Playgroud)
但当然它不起作用(没有变量$ attribute_value).
我该怎么做?