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和补丁调用。