我为公告网站建立研究系统。我们可以搜索类别或通过公告城市。
当有人研究某事时,我想使用Eloquent设置每个类别的结果限制(例如:3)。
我知道这根本不容易,即使在原始SQL中也是如此,而且我已经花了好几个小时试图找到一条没有成功的方法。我试图在查询中添加一个闭包,但我很难理解如何正确使用它...
我知道我需要制作一个子查询才能完成这个技巧,但知道如何组织这一切也很棘手。
工作台(后面是当前查询,它不起作用):
这里是带有查询的控制器:
$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:如果我没有提供足够的代码来理解这个问题,请告诉我!
答案 0 :(得分:0)
好吧,您可以选择所有类别并使用带有限制的foreach来获取所有结果或使用来自sql的分区。