J. *_*uni 46 php model laravel eloquent laravel-4
如果我尝试声明属性,像这样:
public $quantity = 9;
Run Code Online (Sandbox Code Playgroud)
...它不起作用,因为它不被视为"属性",而仅仅是模型类的属性.不仅如此,我还阻止访问实际存在的"数量"属性.
那我该怎么办?
cmf*_*lio 79
对此的更新......
@ j-bruni提交了一份提案,Laravel 4.0.x现在支持使用以下内容:
protected $attributes = array(
'subject' => 'A Post'
);
Run Code Online (Sandbox Code Playgroud)
这将在您构造时自动将属性设置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);
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅Github线程.
J. *_*uni 52
这就是我现在正在做的事情:
protected $defaults = array(
'quantity' => 9,
);
public function __construct(array $attributes = array())
{
$this->setRawAttributes($this->defaults, true);
parent::__construct($attributes);
}
Run Code Online (Sandbox Code Playgroud)
我会建议将其作为PR,这样我们就不需要在每个模型中声明这个构造函数,只需$defaults
在模型中声明数组即可轻松应用...
更新:
正如cmfolio所指出的,实际的ANSWER非常简单:
只是覆盖$attributes
财产!像这样:
protected $attributes = array(
'quantity' => 9,
);
Run Code Online (Sandbox Code Playgroud)
这里讨论了这个问题.
我知道这确实很旧,但我刚刚遇到了这个问题,并且能够使用此网站解决此问题。
将此代码添加到您的模型中
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->user_id = auth()->id();
});
}
Run Code Online (Sandbox Code Playgroud)
更新/免责声明
此代码有效,但它将覆盖常规 Eloquent 模型creating
事件
归档时间: |
|
查看次数: |
59163 次 |
最近记录: |