想象一下以下数据库表:
Clients Users
| Id | name | user_id | | ID | name |
| -- | ----- | ------ | | -- | ------ |
| 1 | NULL | 1 | | 1 | David |
| 2 | Peter | NULL |
并非每个客户端都自动用户,但用户可能拥有客户帐户。用户表仅包含注册用户,如果用户是客户端(不一定是),则创建客户帐户。
我成功地将这些表之间的关系变成了Laravel。雄辩的查询炒作很好,例如:
clients.php
public function userAcc() {
return $this->hasOne('User', 'id', 'user_id');
}
user.php的
public function clientAcc() {
return $this->hasOne('Clients', 'user_id', 'id');
}
问题在于,当我查询这些表时:
Clients::with('userAcc')->get()
在视图中我必须制作很多ifs,例如:
@if($client->userAcc)
{!! $client->userAcc->name !!}
@else
{!! $client->name !!}
@endif
laravel中是否有任何解决方法允许我在每个选择查询上格式化集合?像Accessor这样的东西,但整个集合,所以我将能够在视图中做这样的事情:
{!! $client->realname !!}
它从特定表中写入客户端名称。
非常感谢任何建议
答案 0 :(得分:2)
您可以为此制作方法:
public function getName()
{
return $this->userAcc?$this->userAcc->name:$this->name;
}
在你的刀片中只需调用函数:
{{$client->getName()}}
答案 1 :(得分:2)
这是完成此任务的Laravel方法:
class Client extends Model {
public $appends = ['realname'];
public function userAcc() {
return $this->hasOne('User', 'id', 'user_id');
}
public function getRealnameAttribute(){
return $this->userAcc? $this->userAcc->name : $this->name;
}
现在可以通过$ client-> realname访问它,它将包含在$ client-> toJson()和$ client-> toArray()
中