更新行,列值表示为键

时间:2015-09-04 05:07:46

标签: mysql eloquent

这是我桌子的概述。

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 个答案:

答案 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')