我无法从一组模型中访问嵌套关系。如果我使用first()
,我可以访问该特定模型的关系。例如......
public function movie($id)
{
$member = Movie::find($id)->cast()->first()->person;
return View::make('movie')->with(array(
'data' => $member
));
}
在这种情况下,echo $data
会形成{"person_id":"10255","name":"Paul Benedict"}
之类的结果。那很好但是如果我尝试做类似的事情......
$cast = Movie::find($id)->cast;
return View::make('movie')->with(array(
'data' => $cast
));
如果在我看来,我会尝试打印出每个人......
foreach ($data->person as $member) {
echo $member;
}
我收到以下错误:
Undefined property: Illuminate\Database\Eloquent\Collection::$person
我到底做错了什么,我该怎么做?
答案 0 :(得分:1)
好久不说话! :)我将逐步完成这一步(同样为了我自己的理解)
首先,在这种情况下,我们采取以下步骤:
$member = Movie::find($id)->cast()->first()->person;
Movie::find($id)->cast()
- 此处我们有Collection个MovieCast
个对象。->first()
- 我们接受第一个MovieCast
和...... ->person
- 我们接受与Person
对象关联的MovieCast
对象。现在,我们在$ member变量中有一个Person
对象的实例。也许他有一个名字或一些其他属性(created_at
,modified_at
,age
,等等。
让我们看看另一个案例:
$cast = Movie::find($id)->cast;
此处我们MovieCast
变量中只有Collection
个$cast
个对象。当我们遍历此Collection时,我们将返回MovieCast对象的实例。
因此,我们需要循环遍历这些对象(在movie
视图中):
// I've used the same $data variable as you're defining in your Controller.
@foreach($data as $d)
// each $d is a MovieCast object, so you can access his ->person() method.
<pre>{{ $d->person->name }}</pre>
@endforeach
问题在于,通过在foreach中运行->person
,您正在针对Collection对象运行它,而Collection对象没有person()方法;因此错误!
这有意义吗?