繁体   English   中英

简化Laravel的updateOrCreate方法,用于更新多行

[英]Simplifying Laravel's updateOrCreate method for updating multiple rows

我正在使用updateOrCreate来更新多行。 这可能会变得丑陋。 是否有一种简化这种方法的智能方法,或者该方法是否提供了保存多行的方法?

RequestData::updateOrCreate(['r_id' => $rid, 'meta_key' => 'q1'], ['meta_value' => Input::get('q1')]);
RequestData::updateOrCreate(['r_id' => $rid, 'meta_key' => 'q2'], ['meta_value' => Input::get('q2')]);
RequestData::updateOrCreate(['r_id' => $rid, 'meta_key' => 'q3'], ['meta_value' => Input::get('q3')]);
RequestData::updateOrCreate(['r_id' => $rid, 'meta_key' => 'q4'], ['meta_value' => Input::get('q4')]);
RequestData::updateOrCreate(['r_id' => $rid, 'meta_key' => 'q5'], ['meta_value' => Input::get('q5')]);

您始终可以将其包装在for循环中。 在事务中包装整个事物也会加快速度。

\DB::transaction(function() use ($rid) {
    for($i = 1; $i <= 5; $i++) {
      RequestData::updateOrCreate(['r_id' => $rid, 'meta_key' => "q$i"], ['meta_value' => Input::get("q$i")]);
    }
});

这是我通过检查是否已存在来创建多个记录的方式。 (使您的属性可以在模型上填充,然后将上面的代码放在循环中)。
只是一个示例代码:

foreach($user['did'] as $d){
        $user_did_settings = ModelClass::firstOrCreate(array('user_id' => $user_obj->id,"did"=>$d['did']));
        //$user_did_settings->view_incoming = $d['view_incoming'];
        //$user_did_settings->view_all_outgoing = $d['view_all_outgoing'];
        //$user_did_settings->view_all_incoming = $d['view_all_incoming'];
        //$user_did_settings->notify_on_incoming = $d['notify_on_incoming'];
        //$user_did_settings->notify_on_outgoing = $d['notify_on_outgoing'];
        //$user_did_settings->save();
    } 

我不知道它是否正确,但这是我创建或更新的方式。 看看它是否有帮助。 在上面的例子中, UserDidSetting是我的模型类,它有一个映射到它的DB表。

firstOrCreate方法将创建该模型的新对象,或者从DB为您提供模型的现有对象。

更新:(在您的情况下)

foreach($request->all() as $key => $q){ //Based on how you get data (update please)
    $requestData = RequestData::firstOrCreate(array('r_id' => $rid,'meta_key' => $key,"meta_value"=>$q));
} 

像这样的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM