我有一个名为Run的模型,其中包含此方法:
public function getNameAttribute($name){
if($name == 'Eendaags')
return $this->race_edition->race->name;
return $this->race_edition->race->name.' '.$name;
}
我需要laravel管理员的这个设置,因为很多运行将具有相同的名称,唯一的区别是比赛名称。但在网站的一个地方,我只需要获得名称,而不会发生变异。这可能吗?
答案 0 :(得分:96)
这是正确的方法
// that skips mutators
$model->getOriginal('name');
https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_getOriginal
修改 小心!
正如Maksym Cierzniak在评论中解释的那样,getOriginal()
不仅会跳过mutators,还会在从数据库中读取对象时返回字段的“原始”值。因此,如果您已经修改了模型的属性,则不会返回修改后的值,它仍会返回原始值。从模型类中获取未变异值的更一致和可靠的方法是从attributes
属性中检索它,如下所示:
$this->attributes['name']
但请注意attributes
是受保护的属性,因此您无法从模型类外部执行此操作。在这种情况下,您可以使用
$model->getAttributes()['name']`
或Maksym的技巧来自他的评论。
答案 1 :(得分:10)
从Laravel 7.x开始,有一种访问完整属性的新方法:
SQLERRM
https://laracasts.com/discuss/channels/testing/how-to-disable-casting-during-testing
答案 2 :(得分:2)
我遇到了Eloquent访问器和表单模型绑定的问题 - 通过使用money_format格式化整数,该值不再被加载到表单编号输入字段中。
我使用的解决方法是创建一个名称不同的访问者:
public function getRevenueDollarsAttribute($value)
{
return money_format('$%i', $this->revenue);
}
这为我提供了一个访问器,而不会影响表单模型绑定。
答案 3 :(得分:1)
对于我的 Laravel 7.15.0
public function getOriginalNameAttribute()
{
return $this->attributes['name'];
}
// access it via
$user->originalName;