我有一个名为Run的模型,其中包含以下方法:
public function getNameAttribute($name){
if($name == 'Eendaags')
return $this->race_edition->race->name;
return $this->race_edition->race->name.' '.$name;
}
Run Code Online (Sandbox Code Playgroud)
我需要laravel管理员的这个设置,因为很多运行将具有相同的名称,唯一的区别是比赛名称.但在网站的一个地方,我只需要获得名称,而不会发生变异.这可能吗?
ali*_*gur 113
这是正确的方法
// that skips mutators
$model->getOriginal('name');
Run Code Online (Sandbox Code Playgroud)
https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_getOriginal
编辑: 小心!
正如Maksym Cierzniak在评论中解释的那样,getOriginal()
它不仅仅是跳过mutators,它还会在从数据库中读取对象时返回字段的"原始"值.因此,如果您已经修改了模型的属性,则不会返回修改后的值,它仍会返回原始值.从模型类中获取未变异值的更一致和可靠的方法是从attributes
属性中检索它,如下所示:
$this->attributes['name']
Run Code Online (Sandbox Code Playgroud)
但请注意,这attributes
是受保护的属性,因此您无法从模型类外部执行此操作.在这种情况下,您可以使用
$model->getAttributes()['name']`
Run Code Online (Sandbox Code Playgroud)
或者Maksym的技巧来自他的评论.
sab*_*zdi 26
从 Laravel 7.x 和 8.x 开始,有一种访问完整属性的新方法:
// that skips accessors
$model->getRawOriginal('name');
Run Code Online (Sandbox Code Playgroud)
https://laracasts.com/discuss/channels/testing/how-to-disable-casting-during-testing