显式定义 $guarded=['id'] 以防止意外插入?
Explicitly define $guarded=['id'] to prevent accidental insert?
假设我想将以下逻辑应用于我的所有模型 class:
All Model class with auto incremental id should have protected $guarded = ['id']
这样我就不会自己不小心插入增量id了。
在 Laravel 5 中有意义吗?
除了在每个模型 class 中设置 protected $guarded = ['id']
之外,我还有其他方法可以实现吗?
是的,这样做还是有道理的。虽然ID默认是不可填的,但是直接修改$model->id = $id;
还是可以覆盖的
更好的方法是为所有模型定义一个基础 class 并在那里设置 $guarded 属性。这样你只需要这样做一次。
//Model.php
<?php namespace Your\Model\Namespace;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Model extends Eloquent {
protected $guarded = ['id'];
}
//SomeModel.php
<?php namespace Your\Model\Namespace;
class SomeModel extends Model {}
如果您遵循已接受的答案,您仍然可以 手动设置 id
,实际上,我会说该答案会使您的应用程序的安全性更差。
Laravel 已经默认保护所有内容:
protected $guarded = ['*'];
因此,当 已经 受保护时,无需指定 id
。当您覆盖 属性 时,您是在告诉 Laravel、"Actually, don't guard everything. Only guard the properties that I specify." 因此,从本质上讲,您是在解除对其他属性的保护。
此外,如果您要像这样手动分配属性:
$model = new Model;
$model->id = 1;
$model->name = 'Example';
$model->save();
$guarded
/ $fillable
属性永远不会生效。它们会在您使用 create
、update
、fill
等方法时生效。
假设我想将以下逻辑应用于我的所有模型 class:
All Model class with auto incremental id should have
protected $guarded = ['id']
这样我就不会自己不小心插入增量id了。
在 Laravel 5 中有意义吗?
除了在每个模型 class 中设置 protected $guarded = ['id']
之外,我还有其他方法可以实现吗?
是的,这样做还是有道理的。虽然ID默认是不可填的,但是直接修改$model->id = $id;
还是可以覆盖的更好的方法是为所有模型定义一个基础 class 并在那里设置 $guarded 属性。这样你只需要这样做一次。
//Model.php
<?php namespace Your\Model\Namespace;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Model extends Eloquent {
protected $guarded = ['id'];
}
//SomeModel.php
<?php namespace Your\Model\Namespace;
class SomeModel extends Model {}
如果您遵循已接受的答案,您仍然可以 手动设置 id
,实际上,我会说该答案会使您的应用程序的安全性更差。
Laravel 已经默认保护所有内容:
protected $guarded = ['*'];
因此,当 已经 受保护时,无需指定 id
。当您覆盖 属性 时,您是在告诉 Laravel、"Actually, don't guard everything. Only guard the properties that I specify." 因此,从本质上讲,您是在解除对其他属性的保护。
此外,如果您要像这样手动分配属性:
$model = new Model;
$model->id = 1;
$model->name = 'Example';
$model->save();
$guarded
/ $fillable
属性永远不会生效。它们会在您使用 create
、update
、fill
等方法时生效。