在Laravel 5.4中访问更多远程模型 - 更新

时间:2017-08-24 15:20:56

标签: laravel eloquent

我有三个模特

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

2 个答案:

答案 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