使用Laravel 4.2 MySQL查询限制每个类别的结果

时间:2015-07-16 06:34:58

标签: php mysql sql laravel-4 eloquent

我为公告网站建立研究系统。我们可以搜索类别或通过公告城市。

当有人研究某事时,我想使用Eloquent设置每个类别的结果限制(例如:3)

我知道这根本不容易,即使在原始SQL中也是如此,而且我已经花了好几个小时试图找到一条没有成功的方法。我试图在查询中添加一个闭包,但我很难理解如何正确使用它...

我知道我需要制作一个子查询才能完成这个技巧,但知道如何组织这一切也很棘手。

工作台(后面是当前查询,它不起作用):

enter image description here

这里是带有查询的控制器:

  $announcements = Announcement::select('announcements.*')
                               ->withCitySlug($location)
                               ->withCategory($category_id)
                               ->perCategoryLimit(3)
                               ->get();

模型公告(有趣的部分):

  /**
   * HasManyThrough
   */
  public function categories()
  {

    return $this->belongsToMany('Category', 'announcement_categories');

  }

  public function scopeWithCitySlug($query, $city_slug) {

    if (empty($city_slug)) return $query;

    return $query->where('city_slug', 'LIKE', '%'.$city_slug.'%');

  }

  public function scopeWithCategory($query, $category_id) {

    if ($category_id === FALSE) return $query;

    return $query->join('announcement_categories', 'announcement_categories.announcement_id', '=', 'announcements.id')
                 ->join('categories', 'categories.id', '=', 'announcement_categories.category_id')                 ->where('categories.id', '=', $category_id);

  }

  public function scopePerCategoryLimit($query, $limit) {

    return $query;

    /*return $query->with(array('categories' => function($q)
    {

        $q->limit(3)->get();

    }));*/


  }

这里有任何Eloquent / SQL专家吗?解决这个问题的方法有点帮助是完美的;)

PS:如果我没有提供足够的代码来理解这个问题,请告诉我!

1 个答案:

答案 0 :(得分:0)

好吧,您可以选择所有类别并使用带有限制的foreach来获取所有结果或使用来自sql的分区。