2015-07-16 2 views
2

Я должен создать исследовательскую систему для сайта объявлений. Мы можем осуществлять поиск по категориям или через город объявления.Предельный результат для каждой категории с Laravel 4.2 Запрос MySQL

Когда кто-то что-то изучает Я хочу установить лимит результатов для каждой категории (пример: 3) с использованием Eloquent.

Я знаю, что это совсем не просто, даже в необработанном 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 exp ерт здесь? Немного помочь в решении этой проблемы было бы идеально;)

PS: Если бы я не дал достаточно кода, чтобы понять проблему, просто дайте мне знать!

ответ

0

Ну, вы можете выбрать все категории и использовать foreach с ограничением, чтобы получить все результаты или использовать раздел по sql.