Laravel:在每个选择查询后执行集合格式

时间:2015-12-03 13:50:48

标签: php laravel collections eloquent blade

想象一下以下数据库表:

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 !!}

它从特定表中写入客户端名称。

非常感谢任何建议

2 个答案:

答案 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()