2015-09-04 77 views
1

下面是我的表的概述。更新行,列值表示为键

enter image description here

事情是,meta_key列的值表示为按键。

问题是,我如何更新与user_id的字段。例如,我想更新具有不同值的每个字段的user_id为1的性别,雇员类型,部门,移动设备。

我真的不知道如何,但在Eloquent上有->insert()插入多个值。

$meta_values = [ 
    ['user_id' => $user->id, 'meta_key' => 'mobile', 'meta_value' => $mobile,], 
    ['user_id' => $user->id, 'meta_key' => 'address', 'meta_value' => $address,], 
    ['user_id' => $user->id, 'meta_key' => 'gender', 'meta_value' => $gender], 
    ['user_id' => $user->id, 'meta_key' => 'birthday', 'meta_value' => Carbon::parse($birthday)->format('Y-m-d')], 
    ['user_id' => $user->id, 'meta_key' => 'employee_type', 'meta_value' => $employee_type], 
    ['user_id' => $user->id, 'meta_key' => 'division', 'meta_value' => $division], 
    ['user_id' => $user->id, 'meta_key' => 'date_employed', 'meta_value' => Carbon::parse($date_employed)->format('Y-m-d')], 
    ['user_id' => $user->id, 'meta_key' => 'avatar', 'meta_value' => $images->avatar] 
]; 

$user->userMeta()->insert($meta_values); 

下面是插入版本,但是更新版本将如何变化或者它的外观如何。有任何想法吗?

我认为这将有可能通过使用循环,但我可能认为这不会是一个好主意。

---编辑---

现在,这是我的临时解决方案。这是我要做的第一件事,但是,除非有人对此问题有所答复,否则这是我现在的解决方案。

//List all fields in an array to be updated 
$meta_array = ['mobile', 'address', 'gender', 'birthday', 'employee_type', 'division', 'date_employed']; 

for ($i = 0; $i < count($meta_array); $i++) { 

    $user->userMeta() 
     ->where('meta_key', $meta_array[$i]) 
     ->update(['meta_value' => ${$meta_array[$i]}]); 
} 

回答

1

东西沿着这条线应该为你工作:

$meta_array = array('gender', 'employee_type', 'division', 'mobile'); 

Your\Model::where('user_id', 1) 
      ->whereIn('meta_key', $meta_array) 
      ->update(['meta_value' => 'some_new_value']); 

上面的PHP代码应与你在你的问题了作为一个例子下面原始的SQL查询:

UPDATE your_table 
SET meta_value='some_new_value' 
WHERE user_id=1 AND meta_key IN ('gender', 'employee_type', 'division', 'mobile') 
+0

感谢您的回答,但这并不意味着它会更新具有相同值的所有字段?对不起,如果我的问题不清楚。我编辑了我的问题,如果可能的话,每个字段的值会有所不同。 –

+0

Eloquent只是MySQL的一个简单包装。当你做一个'UPDATE'时,你对指定的_all_列进行_same_更改,对于某些有限的记录集(行)。所以我不认为你想要的是可能的。 –

+0

嗯,我明白了。感谢你,似乎我必须做到这一点混乱的方式。 –