2015-05-24 4 views
0

КонтекстLaravel/SQL: модель запросов, где отношения = X

У меня есть три модели ниже: Listing, номера и типы номеров -

LISTING 
|-----|-------------|--------------------| 
| ID | title  | description  | 
|-----|-------------|--------------------| 
| 1 | some title | some description | 
| 2 | some title | some description | 
| 3 | some title | some description | 
etc 


ROOMS 
|-----|---------------|---------------|--------------------| 
| ID | room_type_id | listing_id | room_description | 
|-----|---------------|---------------|--------------------| 
| 1 | 1    | 1   | some description | 
| 2 | 2    | 1   | some description | 
| 3 | 1    | 1   | some description | 
etc 

ROOM_TYPES 
|-----|------------| 
| ID | name  | 
|-----|------------| 
| 1 | Bedroom | 
| 2 | Bathroom | 
| 3 | Kitchen | 
etc 

Вопрос

Я пытаюсь для запроса модели листингов, которая имеет X количество типов комнат, например все предложения, имеющие> = 2 спальни.

Я думаю, что это SQL правильно, просто не знаю, как это сделать в Laravel -

SELECT listing.id, listing.title, count(rooms.id) 
FROM listing 
JOIN rooms on rooms.listing_id = listing.id 
WHERE rooms.`room_type_id` = 10 
GROUP BY listing.id 
HAVING count(rooms.room_type_id) >= 1 

Любые идеи?

PS. Я использую Laravel 4

Заранее спасибо :)

ответ

0

Так после борьбы со сложным запросом SQL, я приземлился вверх с использованием модели аксессор для достижения своей цели:

На модели листинга

public function bedroomCount() 
    { 
     return $this->rooms() 
      ->selectRaw('listing_id, count(*) as count') 
      ->where('room_type_id', '=', '1') 
      ->groupBy('listing_id'); 
    } 

И запрос

$listings = Listing:: 
      has('bedroomCount', '>=', $x) 
      ->get(); 
Смежные вопросы