在Laravel组织儿童收集

时间:2015-03-19 16:19:41

标签: php laravel laravel-4 eloquent

假设我的运动员属于属于事件专辑的照片。

获取运动员照片的最快方法是$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,它只会显示有这个运动员媒体的专辑。但是执行需要很长时间。

1 个答案:

答案 0 :(得分:0)

这似乎可以大大简化。

这能否为您提供所需的服务?是否更快?

$competitions = Competition::with('publishedAlbums.publishedMedia.athletes')
    ->whereHas('publishedAlbums.publishedMedia.athletes', function($q)
    {
        $q->where('athlete_id', $this->athlete->id);
    })->get();