【发布时间】:2017-07-10 22:24:09
【问题描述】:
我在 Laravel 5.4 中使用 Eloquent 模型 在文档中,我看到:
您也可以使用 create 方法将新模型保存在单个 线。插入的模型实例将从 方法。但是,在这样做之前,您需要指定一个 与所有 Eloquent 模型一样,模型上的可填充或受保护属性 默认情况下防止批量分配。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name'];
}
但是,$fillable 属性已经定义在所有模型使用的特征中:
trait GuardsAttributes
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [];
...
PHP 文档对 Traits 属性很清楚:
如果一个 trait 定义了一个属性,那么一个类就不能定义一个属性 同名,否则报错。如果是 E_STRICT 类定义是兼容的(相同的可见性和初始值) 否则会出现致命错误。
Laravel 文档中关于 adivsed 的实现是否有误?
【问题讨论】:
-
两者都没有错。你有类
A并且你在该类中使用了一个特征。 Trait = 语言辅助复制粘贴。A类不能包含protected $fillable- 它不包含,因为您的类A是Illuminate\Database\Eloquent\Model。到目前为止一切顺利 - 但现在您正在扩展Model并且您可以覆盖protected $fillable属性。继承规则允许这样做。您的问题是有效的,但文档的摘录也是如此。
标签: php laravel eloquent traits laravel-5.4