Laravel使用相同的值更新mysql字段

时间:2013-01-17 19:04:45

标签: php mysql orm laravel

如何将Laravel中的记录更新为与之前相同的值。

尝试了以下操作,但它没有用,我不想再做另一个查询来获取值并进行设置。

$user = User::update($edit['id'], array(
        'name'      => $edit['username'],
        'email'   => $edit['email'],
        'password' => (is_null($edit['password']) ? '`password`' : Hash::make($edit['password'])),
));

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这就是DB::raw()的用途:

$user = User::where_id($edit['id'])::update([
        'name'     => $edit['username'],
        'email'    => $edit['email'],
        'password' => empty($edit['password']) ? DB::raw('`password`') : Hash::make($edit['password'])
]);

更好的方法是不在数组中设置它:

$update_info = [
    'name'  => $edit['username'],
    'email' => $edit['email']
];

if (! empty($edit['password'])) {
    $update_info['password'] = Hash::make($edit['password']);
}

$user = User::where_id($edit['id'])::update($update_info);

如果UserEloquent模型,请尝试以下操作:

$user = User::find($edit['id']);

$user->username = $edit['username'];
$user->email = $edit['email'];

if (! empty($edit['password'])) {
    $user->password = Hash::make($edit['password']);
}

$user->save();

答案 1 :(得分:1)

我想为我正在进行的项目做同样的事情。我知道我的工作正常,我想这就是:

User::where('id','=',$edit['id'])->update( array(
    'name'      => $edit['username'],
    'email'     => $edit['email'],
    'password'  => is_null($edit['password']) ? DB::raw('`password`') : Hash::make($edit['password'])
));