访问多种关系'一个查询中的数据

时间:2014-04-23 20:17:17

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

逻辑:

companyusersusersalerts可以创建alerts,因此,许多user属于alertlocation。每个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)); } 也有一个{{ $alert->users->alerts->reference}} 关系,其中一个警报属于一个位置。

因为这是一个非常庞大的查询,我通过急切加载实现了这一点(我想成功!)。

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

$alert

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

{{1}}

但我一直在

  

ErrorException未定义的属性:   照亮\数据库\雄辩\收藏:: $警告

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

如果我回复{{1}},所有信息都在那里,以一种巨大的不可读的jSON格式!

任何帮助解释如何蜿蜒通过查询数据都将非常感激。

1 个答案:

答案 0 :(得分:0)

您的解决方案对我来说非常复杂。如果你分开你的要求:

我想要实现的是,

对于经过身份验证的用户所属的公司,

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