2015-09-04 46 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

嗯,我明白了。感謝你,似乎我必須做到這一點混亂的方式。 –