【发布时间】:2014-04-24 19:43:16
【问题描述】:
逻辑
一家公司有很多用户。每个用户都有许多警报。每个警报 属于一个位置。
我想在表格中显示每个用户的警报以及警报各自的位置。最好在每个警报的旁边加上用户名。
公司和用户通过数据透视表(belongsToMany 关系)链接。 警报属于某个位置。 该位置有许多警报。
警报模型:
public function location()
{
return $this->belongsTo('Location');
}
public function user()
{
return $this->belongsTo('User');
}
用户模型:
public function companies()
{
return $this->belongsToMany('Company')->withTimestamps();
}
public function alerts()
{
return $this->hasMany('Alert');
}
公司模式:
public function users()
{
return $this->belongsToMany('User')->withTimestamps();
}
位置模型:
public function alerts()
{
return $this->hasMany('Alert');
}
到目前为止,我在控制器中有这个:
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));
}
我如何解释查询
- 获取经过身份验证的用户的公司 ID。
- 获取属于该公司的每个用户,以及他们可能拥有的任何警报及其各自的位置。
转到视图,已执行的 MYSQL 查询似乎是正确的,但是,我终生无法打印出数据,例如,在每个警报中。
我想象的查询将类似于(基于模型):
@foreach($alerts as $alert)
<td>{{$alert->users->alerts->location->address_1}}</td>
@endforeach
但每次我遇到一个或另一个错误时 - 最常见的是Trying to get property of non-object。
对于如何显示每个用户的警报及其各自位置的任何帮助,我们将不胜感激。
【问题讨论】:
-
你能给我们展示一个查询正在检索的模型吗?
-
您的问题是您无法区分哪个关系/查询返回集合以及哪个返回单个模型。因此,您尝试获取相关警报或一组用户/警报(集合)的位置,这显然是不可能的。
-
您会建议 Deczo 怎样缓解这个问题?因为我不确定你在说什么对不起!
-
@seblaze 模型已添加。
-
我希望我给出的答案能让您清楚为什么会出现这些错误以及如何正确处理。
标签: php laravel foreach laravel-4 eloquent