Laravel更新或创建
我想知道是否有记录只是更新,如果没有记录只是创建。问题是: 已拥有记录案例:当数据库中已有记录时,它会创建记录Laravel更新或创建,laravel,eloquent,Laravel,Eloquent,我想知道是否有记录只是更新,如果没有记录只是创建。问题是: 已拥有记录案例:当数据库中已有记录时,它会创建记录 尝试用以下内容替换循环中的代码: ... Choice::UpdateOrCreate( ['user_id' => Auth::id(), 'time' => $time], ['topic_id' => $key, 'question_number' => $value] ); ... 这将在特定时间搜索用户记录,如果没有,则创建一条记录,
尝试用以下内容替换循环中的代码:
...
Choice::UpdateOrCreate(
['user_id' => Auth::id(), 'time' => $time],
['topic_id' => $key, 'question_number' => $value]
);
...
这将在特定时间搜索用户记录,如果没有,则创建一条记录,但如果有,则会更新其主题id和问题编号。尝试用以下代码替换循环中的代码:
...
Choice::UpdateOrCreate(
['user_id' => Auth::id(), 'time' => $time],
['topic_id' => $key, 'question_number' => $value]
);
...
这将在特定时间搜索用户记录,如果没有,则创建一个记录,但如果有,则会更新其主题id和问题编号。使用以下方法:
$matchThese=array('user_id' => Auth::id())
Choice::updateOrCreate($matchThese,['topic_id'=>$key,'question_number' => $value,'time' => $time]);
这样做:
$matchThese=array('user_id' => Auth::id())
Choice::updateOrCreate($matchThese,['topic_id'=>$key,'question_number' => $value,'time' => $time]);
您必须向
UpdateOrCreate
传递两个参数,第一个是搜索记录的属性
,第二个是我们拥有的方法的文档中的值
:
创建或更新与属性匹配的记录,并用值填充它
因此,如果您仅使用用户id
搜索记录,您必须这样做:
public function store(Request $request)
{
$time = $request->input('time');
foreach ($request->input('number') as $key => $value) {
Choice::UpdateOrCreate([
'user_id' => Auth::id()
],
[
'time' => $time,
'topic_id' => $key,
'question_number' => $value,
]);
}
}
您必须向
UpdateOrCreate
传递两个参数,第一个是搜索记录的属性
,第二个是我们拥有的方法的文档中的值
:
创建或更新与属性匹配的记录,并用值填充它
因此,如果您仅使用用户id
搜索记录,您必须这样做:
public function store(Request $request)
{
$time = $request->input('time');
foreach ($request->input('number') as $key => $value) {
Choice::UpdateOrCreate([
'user_id' => Auth::id()
],
[
'time' => $time,
'topic_id' => $key,
'question_number' => $value,
]);
}
}
根据crud UPDATEORCEATE中的Rest更新,如果找不到匹配的记录,它将创建一个记录。所以,您选择的格式::UpdateOrCreate必须如下
Choice::updateOrCreate(['user_id' => Auth::id(),
'time' => $time,], [
'topic_id' => $key,
'question_number' => $value,
])
其中['user_id'=>Auth::id(),
“time”=>$time,]是检查记录是否存在。根据crud UPDATEORCEATE中的Rest更新,如果未找到匹配的记录,则创建一个记录。所以,您选择的格式::UpdateOrCreate必须如下
Choice::updateOrCreate(['user_id' => Auth::id(),
'time' => $time,], [
'topic_id' => $key,
'question_number' => $value,
])
其中['user_id'=>Auth::id(),
“time”=>$time,]是检查记录是否存在。每个记录、用户id和主题id的唯一性是什么?应该更新的字段是什么?问题编号和主题id应该更新。要搜索记录,您只需要
用户id
?方法是updateOrCreate([],[])
-从小写开始。该方法接受两个数组,第一个数组检查可能存在的值,第二个数组创建要更新的数据。类似于Choice::updateOrCreate(['user\u id'=>Auth::id(),'time'=>$time],'topic\u id'=>$key,'question\u number'=>$value])代码>。每条记录、用户id和主题id的唯一性是什么?应该更新的字段是什么?问题编号和主题id应该更新。要搜索记录,您只需要用户id
?方法是updateOrCreate([],[])
-从小写开始。该方法接受两个数组,第一个数组检查可能存在的值,第二个数组创建要更新的数据。类似于Choice::updateOrCreate(['user\u id'=>Auth::id(),'time'=>$time],'topic\u id'=>$key,'question\u number'=>$value])代码>SQLSTATE[HY000]:一般错误:1366不正确的整数值:“$key”用于第1行的“topic\u id”列(SQL:插入到
choices`)(用户id
,主题id
,问题编号
,时间
,更新时间
,创建时间
)值(1,$key,2030:012018-06-06 17:34:292018-06-06 17:34:29)`使用$key的值
它没有将每个数据作为键。只是创建了最后一个。SQLSTATE[HY000]:一般错误:1366不正确的整数值:'$key'用于第1行的'topic_id'列(SQL:insert-into
choices`(用户id
,主题id
,问题编号
,时间
,更新时间
,创建时间
)值(1,$key,20,30:012018-06-06 17:34:292018-06-06 17:34:29))`使用$key的值
它没有将每个数据作为键。只创建了最后一个。它没有将每个数据作为键。只创建了最后一个。它没有将每个数据作为键。只创建了最后一个。它没有将每个数据作为键。只创建了最后一个。你说它没有将每个数据作为键是什么意思?foreach($request->input('number'))作为$key=>$value){
它不再工作了。我只是不知道为什么。它没有将每个数据作为key。只是创建了最后一个。它没有将每个数据作为key是什么意思?foreach($request->input('number')作为$key=>$value){
它不再工作了。我只是不知道为什么。未定义变量:id
和我的相同。创建新的。更新旧的。我知道对于用户提供的这种情况,这是最好的解决方案。我建议最好分别创建post和补丁调用。未定义变量:id
和它相同我的。创建新的。更新旧的。我知道对于用户提供的这种情况,这是最好的解决方案。我建议最好分别创建一个post和补丁调用。