这是我桌子的概述。
问题是,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]}]);
}
答案 0 :(得分: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')