我使用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')]);
答案 0 :(得分:1)
这是我通过检查是否已存在来创建多个记录的方式。 (使您的属性可以在模型上填充,然后将上面的代码放在循环中)。
只是一个示例代码:
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
是我的模型类,它有一个映射到它的数据库表。
方法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));
}
像这样。
答案 1 :(得分:1)
您始终可以将其包装在for循环中。在事务中包装整个事情也会加快速度。
\DB::transaction(function() {
for($i = 1; $i <= 5; $i++) {
RequestData::updateOrCreate(['r_id' => $rid, 'meta_key' => "q$i"], ['meta_value' => Input::get("q$i")]);
}
});