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

Posted

技术标签:

【中文标题】Laravel:在每次选择查询后执行集合格式化【英文标题】:Laravel: Perform collection formatting after each select query 【发布时间】:2016-03-08 04:06:19 【问题描述】:

想象以下数据库表:

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

鉴于我必须做出很多如果,例如:

@if($client->userAcc)
    !! $client->userAcc->name !!
@else
    !! $client->name !!
@endif

laravel 中是否有任何解决方法可以让我在每个选择查询上格式化集合?类似 Accessor 的东西,但在整个系列中,所以我可以在视图中做这样的事情:

!! $client->realname !!

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

非常感谢您的任何建议

【问题讨论】:

【参考方案1】:

这是实现此目的的 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() 中

【讨论】:

确认,工作正常,感谢 Jeff 和 @Mina Youssef【参考方案2】:

你可以为此制定一个方法:

public function getName()

  return $this->userAcc?$this->userAcc->name:$this->name;

在你的刀片中调用函数:

$client->getName()

【讨论】:

像魅力一样工作非常感谢@Mina Youssef,最后一件事关于AJAX调用(返回JSON)你有什么建议如何解决它?我的意思是 Clients::with('userAcc')->get()->toJson(); ... 您可以更进一步,使其成为一个属性,这将允许您以您描述的方式使用它:public function getRealnameAttribute() return $this->userAcc?$this->userAcc->name:$this->name; 然后您可以使用$client->realname 访问它@SirInfant 您可以也可以使用 toJson 函数通过将 appends 属性添加到模型来访问它。 public $appends = ['realname'] 然后 ->toJson() 函数将包含实名 这可能行不通,因为自定义访问器不会在 toArray() 中返回。您需要重写 toArray() 方法,并向其添加新的自定义访问器。 请检查这里***.com/questions/17232714/…

以上是关于Laravel:在每次选择查询后执行集合格式化的主要内容,如果未能解决你的问题,请参考以下文章

嘲笑 Laravel 雄辩的水合关系

excel 日期格式储存后 每次开启又恢复成常规

Laravel 格式资源集合响应报错 Property [product_id] does not exist on this collection instance

laravel框架where查询json格式的数据

Laravel MIN MAX GroupBy 来自集合

更改默认日期格式 laravel sql 查询