Eloquent:如何在使用create()方法时为保护列分配值?

Aur*_*vik 4 php mysql laravel eloquent laravel-5.2

假设我有一个用户提交表单的端点.表单输入将作为JSON对象存储在数据库表的列中,用户ID将存储在另一个中.因为我不希望用户能够以某种方式设置他们想要的任何用户ID,所以我将user_id列从Eloquent模型的$ fillable变量中删除.

create()方法接受要分配的键/值对数组,但仅将值分配给可填充列.如何同时将用户ID添加到受保护的user_id列?我是否必须获取最后一行并将用户ID更新为第二个操作?

感谢您的帮助,非常感谢.

Mar*_*łek 11

如果你没有属性,$fillable并不意味着你无法填写它.

$fillable属性包含可以使用create()fill()方法填充的属性,但您仍然可以使用属性访问权限为任何属性设置值.

因此,让我们假设你有型email,somethingelse属性.你设置$fillable如下:

protected $fillable = ['email', 'something'];
Run Code Online (Sandbox Code Playgroud)

现在让我们假设你有这样的数据:

$data = [
  'email' => 'sample@example.com',
  'something' => 'foo',
  'else' => 'bar',
];
Run Code Online (Sandbox Code Playgroud)

所以现在当你使用:

Model::create($data);
Run Code Online (Sandbox Code Playgroud)

你将不仅填补emailsomething,因为这些是在$fillableelse不会被填补,因为它不是,但你总是可以做这样的事情:

$model = new Model($data);
$model->else = 'bar';
$model->save();
Run Code Online (Sandbox Code Playgroud)

所以你可以在这里设置else属性值,即使它不在里面,$fillable但你需要像普通属性一样访问它.

  • @AuroraSchmidt是的,你可以,但只应填写可填充的参数,然后你可以填写不可填写的参数,最后保存模型 (2认同)