2017-02-21 53 views
4

我使用内Laravel 5.4 口才车型在本文档中,我看到:Laravel/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']; 
} 

然而,$可填充属性在所有车型使用的特点已经定义:

trait GuardsAttributes 
{ 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = []; 

... 

的PHP文件是清楚的特质属性:

如果trait定义了一个属性,那么类不能定义一个名称相同的属性 ,否则会发出错误。这是一个E_STRICT,如果 类定义兼容(相同的可见性和初始值) 否则致命错误。

Laravel文档是否存在对adivsed实现的错误?

+1

两个都不对。你有班级A,你在班上使用特质。特质=语言辅助复制粘贴。 'A'类不能包含'protected $ fillable' - 它不会,因为你的类'A'是'Illuminate \ Database \ Eloquent \ Model'。到目前为止这么好 - 但现在你扩展了'Model',你可以覆盖'protected $ fillable'属性。继承规则允许这样做。你的问题是有效的,但都是文件摘录。 – Mjh

回答

4

您不能覆盖PHP文档建议的同一类中的特征属性。然而,Laravel要求你在一个子类(你扩展了Eloquent模型类的模型类,这个特征包含在Eloquent模型类中,而不是你的模型类)中覆盖它。这是一个非常有效的事情!