【问题标题】:Accessing multiple relationships' data within one query在一个查询中访问多个关系的数据
【发布时间】:2014-04-23 20:17:16
【问题描述】:

逻辑:

一个company有很多usersusers可以创建alerts,因此,很多alerts属于一个user。每个alert 也有一个location 关系,其中一个警报属于一个位置。

因为这是一个相当庞大的查询,我已经通过预加载实现了这一点(我认为是成功的!)。

我想要实现的是,对于经过身份验证的用户所属的公司,获取为同一公司工作的所有其他用户,以及他们的所有警报(包括位置)。

public function getAdminIndex()
{   
    $company_id = User::find(Auth::user()->id)
                             ->companies()
                             ->first()
                             ->id;
    $alerts = Company::with('users.alerts.location')
                             ->where('id', '=', $company_id)
                             ->get();
    $this->layout->content = View::make('agents.admin.index',
                             array('alerts' => $alerts));
}

我现在唯一的问题是尝试打印相关信息。我想打印警报表中的“参考”列,首先在 foreach 循环中:

{{ $alert->users->alerts->reference}}

但我不断得到

ErrorException 未定义属性: Illuminate\Database\Eloquent\Collection::$alerts

我的逻辑是,该功能将转到公司->用户->警报->...这是他们在各自模型中引用的方式。

如果我回显$alert,所有信息都在那里,采用一种巨大的无法读取的 jSON 格式!

任何帮助解释如何通过查询数据蜿蜒曲折将不胜感激。

【问题讨论】:

  • 如果你有一对一的关系,你不应该把数据放在不同的表中
  • 这并不总是正确的,@php_nub_qq,有时有充分的理由使用 1:1 关系:stackoverflow.com/questions/517417/…
  • @Bram 恕我直言。基本上,有任何意义的两个论点是“通过不拾取不必要的数据来节省空间”,这不需要评论并提高数据的安全性。我不相信将两个表中的数据分开会带来任何重大的安全改进。不过这只是我的看法。

标签: php laravel foreach laravel-4 eager-loading


【解决方案1】:

您的解决方案在我看来非常复杂。如果你把你问的分开:

我想要实现的是,

对于认证用户所属的公司,

<?php
$company = Auth::user()->company;

获取为同一公司工作的所有其他用户,

<?php
$other_users = $company->users()->where('id', '!=', Auth::user()->id)->get();

连同他们的所有警报(包括位置)。

<?php
$other_users->load('alerts.locations');

或者,结合:

<?php
$other_users = $company->users()
    ->where('id', '!=', Auth::user()->id)
    ->with('alerts.locations')
    ->get();

关于您的其他问题:

如果我回显 $alert,所有信息都在那里,以一种巨大的不可读的 JSON 格式!

试试dd($alert-&gt;toArray())

【讨论】:

    猜你喜欢
    • 2021-01-27
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多