Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-模型ID保护_Php_Laravel_Eloquent_Laravel Eloquent - Fatal编程技术网

Php Laravel-模型ID保护

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,还是应该使用

假设我们有一个主题提交html表单,它使用以下输入字段名称:

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)。