Laravel PHP orderBy WhereHas count Child

时间:2016-12-19 17:43:49

标签: php laravel

我有以下代码:

  $genres = ['action', 'drama', 'romance'];
  $similiarSeries = TheEpisode::with('TheSeries.TheGenres')->whereHas('TheSeries.TheGenres', function($q) use($genres) {
      $q->whereIn('genre', $genres);
  });

此代码将: 1.让TheGenres可见(关系) 2.将搜索有动作类型或戏剧或浪漫的电视剧。

但是现在我想根据与$genres数组匹配的数量对它们进行排序。

假设TheEpisodeTheSeries.TheGenres匹配所有3种类型(动作,戏剧,浪漫),应首先排序,然后另一TheEpisode只匹配2种类型(动作,戏剧) ,这应该作为第二... ...

此问题与Laravel orderBy whereHas非常相关。

$similiarSeries = TheSeries::whereHas('TheGenres', function($q) use($genres) {
    $q->whereIn('genre', $genres);
})->withCount(['TheGenres' => function ($query) use ($genres) {
    $query->whereIn('genre', $genres);
}])->orderBy('TheGenres_count', 'desc');

return $similiarSeries->take(10);

唯一的区别是,现在我们正在尝试提取与TheEpisode相关的TheSeries

更新

我已经尝试了以下代码,这应该适用于我的意见,但它表示属性“TheGenres”未定义:

  $similiarSeries = TheEpisode::with('TheSeries.TheGenres')->whereHas('TheSeries.TheGenres', function($q) use($genres) {
      $q->whereIn('genre', $genres);
  })->withCount(['TheSeries' => function ($q) use ($genres) {

      $q->TheGenres->whereIn('genre', $genres);
  }])->orderBy('the_genres_count', 'desc');

在laravel中这是不可能的吗?

0 个答案:

没有答案