Здесь пригодится get{...}Attribute()
функция Model
. Допустим, вы хотите получить доступ к $user->full_name
без фактического сохранения full_name
в базе данных. Поскольку у вас есть first_name
и last_name
, вы можете заявить о своей User
модели:
public function getFullNameAttribute(){
return $this->first_name." ".$this->last_name;
}
Laravel проанализирует, что находится между get
и Attribute
, в свойство, доступное в модели, в этом случае либо $user->full_name
, либо $user->fullName
.
Чтобы перевести это в ваш вариант использования, вы можете использовать что-то вроде:
В вашей User.php
модели:
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...";
}
Примечание: вам нужно будет настроить ваши if
операторы, чтобы определить, что возвращать, основываясь на вашем settings
.
Где-то в контроллере или в представлении вы можете позвонить $user->display_name
, чтобы отобразить одну из 3 вещей (определяемых логикой / инструкциями возврата выше):
public function example(){
$user = User::first();
dd($user->display_name);
// $user->first_name." "$user->last_name, $user->username or "Not Configured..."
}
При этом при доступе к $user
будет доступно свойство display_name
, которого на самом деле нет в модели, поэтому вы не столкнетесь с проблемами, если позвоните $user->save();