1
下面是我的表的概述。更新行,列值表示为键
事情是,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]}]);
}
感谢您的回答,但这并不意味着它会更新具有相同值的所有字段?对不起,如果我的问题不清楚。我编辑了我的问题,如果可能的话,每个字段的值会有所不同。 –
Eloquent只是MySQL的一个简单包装。当你做一个'UPDATE'时,你对指定的_all_列进行_same_更改,对于某些有限的记录集(行)。所以我不认为你想要的是可能的。 –
嗯,我明白了。感谢你,似乎我必须做到这一点混乱的方式。 –