Laravel 5.5 - Prevent additional attribute to be used during model update
users表以及其他表具有以下字段:username,first_name,last_name。每个用户都可以决定显示用户名还是全名(姓氏)。此选择存储在"设置"表中。
要在需要显示名称的任何时候不执行重复查询和调用函数,我会在用户对象创建时将其添加到要显示的名称上,例如,根据用户的选择
问题是,当用户更新配置文件时,Laravel尝试将此名称保存在
是否可以避免Laravel尝试将值存储在数据库中?
正如在其他讨论中所建议的那样,我已经尝试为User模型中的属性提供默认值,我尝试将属性设置为保护状态,但是没有任何效果。
这是
1 2 3 | public function getFullNameAttribute(){ return $this->first_name."".$this->last_name; } |
Laravel会将
要将其转换为您的用例,您可以使用类似以下的内容:
在您的
1 2 3 4 5 6 7 8 | public function getDisplayNameAttribute(){ if($this->settings =="use_full_name"){ return $this->first_name."".$this->last_name; } else if($this->settings =="use_username"){ return $this->username; } return"Not Configured..."; } |
注意:您必须配置
在控制器或视图中的某处,您可以调用
1 2 3 4 5 | public function example(){ $user = User::first(); dd($user->display_name); // $user->first_name.""$user->last_name, $user->username or"Not Configured..." } |
这样做,当您访问