Php Laravel-模型ID保护
假设我们有一个主题提交html表单,它使用以下输入字段名称:Php Laravel-模型ID保护,php,laravel,eloquent,laravel-eloquent,Php,Laravel,Eloquent,Laravel Eloquent,假设我们有一个主题提交html表单,它使用以下输入字段名称: name text 在控制器级别,我们可能编写了如下内容: public function create(Request $request) { // Validation logic ... Topic::create($request->all()); } 如果客户端用户添加一个id输入字段: id name text Laravel是否也会填充新模型对象的id字段? 我可以保护一个型号的id,还是应该使用
name
text
在控制器级别,我们可能编写了如下内容:
public function create(Request $request) {
// Validation logic ...
Topic::create($request->all());
}
如果客户端用户添加一个id
输入字段:
id
name
text
Laravel是否也会填充新模型对象的id
字段?
我可以保护一个型号的
id
,还是应该使用$request->only()
?您不需要对默认为id
的主键使用$filleble
数组或$guarded
。当您使用create()
方法时,Eloquent不会填充主键。Laravel有两种方法可以实现这一点:
class Topic extends Model {
protected $fillable = [
"name" , "text"
];
}
或者,情况正好相反:
class Topic extends Model {
protected $guarded = [ "id" ];
}
$fillable
包含允许在模型中进行批量分配的内容(通过填充或构造函数等),而$GARDED
包含不应进行批量分配的内容
更多信息请访问,这是我一直在寻找的答案。你有文档的链接来确认这一点吗?@LppEdd文档中没有关于这一点的内容。即使您将
id
添加到$filleble
数组中,如果您使用create()
方法,Eloquent也会忽略它。我问这个问题是因为我查看了源代码,create()直接进入save(),在默认id字段上没有任何过滤器。您也可以自己查看create()
使用fill()
,它使用$filleble
和$guarded
数组。但是它总是使用save()
,它使用insertAndSetId()
方法。您可能需要查看insertAndSetId()
方法,以了解雄辩如何创建ID。Alexey在上面的回答中指出,默认(自动)ID字段不需要在受保护或可填充数组上指定。您通常会插入它吗?不确定是否会创建它可能不会填充递增id,但可能会填充非递增id。不过,我希望fill
需要它。您可能需要检查。我正在搜索文档,但没有详细说明。查看源代码,create()似乎只使用了所有指定的属性,“id”,我看不到filters@LppEdd实际上,如果您的id
是自动递增的,那么即使您提供了它,MySQL也会忽略它。(如果您使用的是MySQL)。