假设我的运动员属于属于事件专辑的照片。
获取运动员照片的最快方法是$athlete->photos;
如果我朝这个方向前进:
$events= Event::whereHas('albums.photos.athletes', function ($q)
{
$q->where('athlete_id', $this->athlete->id);
})
它有效,但速度较慢,而且我无法执行$ events->相册等操作,只返回包含此特定运动员照片的相册。
在我的页面上,我希望按活动显示照片。我如何使用$athlete->photos
然后按事件组织它们?
我可以遍历从$athlete->photos
找到的所有照片并构建一个新的数组,其中包含event-> album->照片的层次结构,但这看起来真的很笨拙。使用Eloquent有更好的方法吗?
编辑:
这将完全返回我需要的数据,而无需进一步查询,但完成时间大约需要20秒。
// Get all athlete media
$competitions = Competition::whereHas('publishedAlbums.publishedMedia.athletes', function ($q)
{
$q->where('athlete_id', $this->athlete->id);
})
->with(array('publishedAlbums.publishedMedia' => function($query)
{
$query->whereHas('athletes', function ($q)
{
$q->where('athlete_id', $this->athlete->id);
});
}))
->with(array('publishedAlbums' => function($query)
{
$query->whereHas('publishedMedia.athletes', function ($q)
{
$q->where('athlete_id', $this->athlete->id);
});
}))
->get();
有了这个,我可以做一些事情,比如$ competitions-> publishedAlbums,它只会显示有这个运动员媒体的专辑。但是执行需要很长时间。
答案 0 :(得分:0)
这似乎可以大大简化。
这能否为您提供所需的服务?是否更快?
$competitions = Competition::with('publishedAlbums.publishedMedia.athletes')
->whereHas('publishedAlbums.publishedMedia.athletes', function($q)
{
$q->where('athlete_id', $this->athlete->id);
})->get();