Model :: create()方法在创建记录时仅考虑原始请求值

时间:2018-02-08 08:24:00

标签: php laravel

我试图通过将请求对象作为数组传递来创建记录,如

    User::create($request->toArray());

这样可以正常工作,并在表格中创建记录。

但是我需要在创建记录之前操作一个字段,

    $request->password = bcrypt($request->password);

    //echo $request->password;
    User::create($request->toArray());

这不起作用,表中创建的记录仍然具有旧的未加密值 我可以确认$request->password确实有加密值。 $request->toArray()电话中似乎发生了一些事情。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

您只需更改Request对象,但可以执行此操作:

User::create(['password' => bcrypt($request->password)] + $request->all());

但更好的方法是使用mutator password属性:

public function setPasswordAttribute($value)
{
    $this->attributes['password'] = bcrypt($value);
}

然后就这样做:

User::create($request->all());

答案 1 :(得分:0)

您可以array_mergepassword添加到$request->toArray()

$password = bcrypt($request->password);

$data = array_merge($request->toArray(), compact('password'))

User::create($data);