2017-02-21 8 views
4

、私は以下を参照してください。Laravel/Eloquentは形質財産を無効にするよう勧めますか?私はドキュメントでLaravel 5.4 内雄弁モデルを使用しています

あなたはまた、単一 ラインの新モデルを保存するために作成する方法を使用することができます。挿入されたモデルインスタンスは メソッドから返されます。ただし、すべてのEloquentモデル はデフォルトで大量割り当てから保護されているため、その前に のfillable属性またはguarded属性をモデルに指定する必要があります。

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

... 

PHPのドキュメントは、トレイトプロパティについて明確である:

場合ただし、$の充填可能なプロパティは、すでにすべてのモデルで使用される特性で定義されている

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Flight extends Model 
{ 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = ['name']; 
} 

特性はプロパティを定義し、クラスは同じ名前のプロパティ を定義できません。それ以外の場合はエラーが発行されます。それ以外の場合は、 クラス定義が互換性(同じ可視性と初期値) または致命的なエラーの場合はE_STRICTです。

アドバイスされた実装についてLaravelのドキュメントは間違っていますか?

+1

どちらも間違っています。あなたはクラスAを持っていて、そのクラスの中で特性を使います。 Trait =言語支援コピー貼り付け。あなたのクラス 'A'が' Illuminate \ Database \ Eloquent \ Model'であるため、クラス 'A'は' protected $ fillable'を含むことはできません。今はとても良いですが、 'Model'を拡張していて、' protected $ fillable'プロパティをオーバーライドできます。継承ルールはこれを可能にします。あなたの質問は有効ですが、どちらも文書化の抜粋です。 – Mjh

答えて

4

PHPドキュメントの示唆しているのと同じクラスの特性プロパティを上書きすることはできません。

しかし、Laravelはこれを子クラス(Eloquentモデルクラスを拡張するモデルクラスであり、その特性はモデルクラスではなくEloquentモデルクラスに含まれています)でオーバーライドするように求めています。これは完全に有効なことです!

関連する問題