Laravel / SQL:查询关系= X的模型

时间:2015-05-24 15:44:55

标签: php sql laravel-4 eloquent

上下文

我有三种型号:列表,房间和房间类型 -

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

提前致谢:)

1 个答案:

答案 0 :(得分: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();