我有三个模特
Photo
-id
-path_full
Person
-id
-name
Face
-id
-person_id //was people_id
-photo_id
我正在尝试从Photo模型访问此人名 面部模型:
public function photo()
{
return $this->belongsTo(Photo::class);
}
public function person()
{
return $this->belongsTo(Person::class);
}
照片模型:
public function faces()
{
return $this->hasMany(Face::class);
}
人物模型:
public function faces()
{
return $this->hasMany(Face::class);
}
在我的控制器中,我像这样加载照片:
$photos = Photo::with('faces')->paginate();
在我的刀片模板中,我想访问照片中脸部的名称。 我到目前为止 这是一个foreach因此奇异的$ photo:
{{implode($photo->faces->pluck('people_id')->toArray(),', ')}}
如何获取此人的姓名?
解决方案
我在我的视图中需要这个,并注意我对数据库的更改为person_id,所以雄辩可以做到这一点。
//Controller:
$photos = Photo::with('faces.person')->paginate();
//View:
@foreach($photo->faces as $face)
{{$face->person['name']}}
@endforeach
答案 0 :(得分:2)
您可以在Photo的模型上急切加载person
数据 ,然后致电faces
:
// Photo.php
public function faces()
{
return $this->hasMany(Face::class)->with('person');
}
或者在您的查询中,您可以执行此操作以仅在此时急切加载 :
$photos = Photo::with('faces', 'faces.person')->paginate();
现在您可以这样访问:
$photos->first()->faces->first()->person->name; // will print the name of the person of the first face of the first photo...
我希望这个答案有所帮助。
答案 1 :(得分:0)
尝试通过更改您的查询来获取面部人物:
Photo::with(['faces' => function($query) {$query->with('person')}])->paginate();
我对语法不太确定,但这就是你如何在一个雄辩的模型中嵌套关系。写这个的较短方式可能是:Photo::with('faces.person')->paginate();
提供了更多信息here。