Eloquent:使用create()方法时,如何为保护列赋值


Eloquent: How do I assign values to guarded columns while using the create() method?

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

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

谢谢你的帮助,非常感谢。

如果$fillable中没有属性,并不意味着不能填充。

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

因此,假设您拥有具有emailsomethingelse属性的Model。你这样设置$fillable

protected $fillable = ['email', 'something'];

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

$data = [
  'email' => 'sample@example.com',
  'something' => 'foo',
  'else' => 'bar',
];

所以现在当你使用:

Model::create($data);

你将只填写emailsomething,因为它们在$fillableelse中,不会被填写,因为它不是,但你总是可以这样做:

$model = new Model($data);
$model->else = 'bar';
$model->save();

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