2017-02-21 100 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模型類中,而不是你的模型類)中覆蓋它。這是一個非常有效的事情!