【发布时间】:2014-04-23 20:17:16
【问题描述】:
逻辑:
一个company有很多users,users可以创建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