次のように、プロパティを宣言しようとすると:
public $quantity = 9;
...「属性」ではなく、単にモデル クラスのプロパティと見なされるため、機能しません。これだけでなく、実際に存在する「数量」属性へのアクセスもブロックしています。
じゃあどうすればいいの?
これにアップデート...
@j-bruni が提案を提出し、Laravel 4.0.x は現在、以下を使用してサポートしています:
protected $attributes = array(
'subject' => 'A Post'
);
構築時に属性subject
を自動的に設定します。A Post
彼が回答で言及したカスタム コンストラクターを使用する必要はありません。
ただし、彼のようにコンストラクターを使用することになった場合 ( を使用するために必要でした)、上記の配列を使用して設定したものをオーバーライドするCarbon::now()
ことに注意してください。例えば:$this->setRawAttributes()
$attributes
protected $attributes = array(
'subject' => 'A Post'
);
public function __construct(array $attributes = array())
{
$this->setRawAttributes(array(
'end_date' => Carbon::now()->addDays(10)
), true);
parent::__construct($attributes);
}
// Values after calling `new ModelName`
$model->subject; // null
$model->end_date; // Carbon date object
// To fix, be sure to `array_merge` previous values
public function __construct(array $attributes = array())
{
$this->setRawAttributes(array_merge($this->attributes, array(
'end_date' => Carbon::now()->addDays(10)
)), true);
parent::__construct($attributes);
}
詳細については、Github スレッドを参照してください。
これは私が今していることです:
protected $defaults = array(
'quantity' => 9,
);
public function __construct(array $attributes = array())
{
$this->setRawAttributes($this->defaults, true);
parent::__construct($attributes);
}
これをPRとして提案するので、すべてのモデルでこのコンストラクターを宣言する必要がなく、モデルで配列を宣言するだけで簡単に適用できます$defaults
...
更新:
cmfolio で指摘されているように、実際の ANSWER は非常に単純です。
$attributes
プロパティをオーバーライドするだけです!このような:
protected $attributes = array(
'quantity' => 9,
);
この問題はここで議論されました。
これは非常に古いものですが、この問題が発生したばかりで、このサイトを使用して解決できました。
このコードをモデルに追加します
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->user_id = auth()->id();
});
}
更新/免責事項
このコードは機能しますが、通常の Eloquent Model creating
Eventをオーバーライドします