2015-09-04 3 views
1

Вот обзор моей таблицы.Обновить строки, значения столбцов представляют собой ключи

enter image description here

Дело в том, значение meta_key столбца представляют в качестве ключей.

Проблема в том, как бы я обновил поля user_id. Например, я хочу обновить пол, employee_type, division, mobile, который имеет разные значения для каждого поля, которое имеет 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); 

Вот версия вставки, но как будет выглядеть версия обновления или как она выглядит. Есть идеи?

Я думаю, что это было бы возможно, используя цикл, но я, вероятно, думаю, что это не будет отличная идея.

--- EDITED ---

В настоящее время, вот мое временное решение. Вот что я буду делать в первую очередь, но пока кто-то не ответит на эту проблему, на данный момент это мое решение.

//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. Когда вы выполняете «ОБНОВЛЕНИЕ», вы вносите изменения _same_ в указанные _all_ столбцы для определенного ограниченного набора записей (строк). Поэтому я не думаю, что вы хотите. –

+0

Хммм, я вижу. Спасибо за это, кажется, я должен сделать это грязным способом. –

Смежные вопросы