当前位置: 首页 > 知识库问答 >
问题:

Laravel:在每个select查询之后执行集合格式设置

章振
2023-03-14

想象以下DB表:

Clients                         Users
| Id | name  | user_id |        | ID | name   |
| -- | ----- | ------  |        | -- | ------ |
| 1  | NULL  | 1       |        | 1  | David  |
| 2  | Peter | NULL    |        

并非每个客户端都自动成为用户,但用户可能拥有客户端帐户。Users表只包含注册用户,如果用户是客户端(不必是),则创建客户端帐户。

我已成功地使这些表之间的关系是拉威尔。能言善辩的提问很好,例如:

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中是否有任何变通方法允许我在每个select查询上格式化集合?类似于Accessor,但在整个集合中,因此我将能够在视图中执行以下操作:

{!! $client->realname !!}

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

非常感谢任何建议

共有2个答案

温星华
2023-03-14

您可以为此创建一个方法:

public function getName()
{
  return $this->userAcc?$this->userAcc->name:$this->name;
}

在您的边栏选项卡中,只需调用函数:

{{$client->getName()}}
狄新立
2023-03-14

这是实现这一目标的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访问它-

 类似资料:
  • 问题陈述:在JPA hibernate中,我执行了一个方法

  • 问题内容: 我要么变老,要么我需要写的查询变得越来越复杂。以下查询将获取与该用户的所有关联。 该表为(,,,); 现在,我还需要通过 独立查询如下所示: 但是,是否可以将这两个查询合并为一个查询?我的逻辑认为应该这样,尽管我不知道如何进行实际的JOIN。 问题答案: 我可能会使用UNION。

  • 提前感谢! UPDATE:这是两个不同的查询,而不是delete查询中的语句。

  • 问题内容: 我想将两个选择查询与结合在一起。 如何使用第二个中的第一个结果? 问题答案: 使用 CTE 可以在多个查询中重用子查询的结果。 为此,您需要PostgreSQL 8.4+: 您最有可能想要而不是。不排除重复项,这样可以更快。

  • 问题内容: 我有以下查询,它为每个查询获取最新的N : 我有指标的,,。 这是我想出的唯一解决方案,每个站最多可以获取单个记录。但是,它非常慢(81000条记录的表为154.0毫秒)。 如何加快查询速度? 问题答案: 假设至少Postgres 9.3。 指数 首先,多列索引将有助于: 的拟合度稍好一些,但如果不使用,索引仍将以几乎相同的速度向后扫描。 假设已定义,否则在索引 和 查询中考虑: Po

  • 需求:从一个用户界面,我得到一个数据库表的选定列表。这些表中的数据将被提取并存储在文件位置。我们希望使用NiFi Rest API,因为有定制UI的需求。因此,我们使用REST API调用NiFi处理器。 问题是如何在循环中为在分隔字符串中接收的每个表名调用ExecuteSQL。 如果需要更多的信息,请让我知道。