我在laravel 5.1中使用postgres作爲數據庫。我這裏有一個小提琴的情況下,它有助於理解我的問題:https://www.db-fiddle.com/f/5ELU6xinJrXiQJ6u6VH5/4如何使用laravel查詢構建器編寫此查詢?
with properties as (
select
properties.*,
json_agg(property_fields.*) as property_fields
from
properties
left join fields as property_fields
on property_fields.parent = 'property' and property_fields.parent_id = properties.id
group by properties.id, properties.deal_id, properties.address
)
select
deals.*,
json_agg(properties.*) as deal_properties,
json_agg(deal_fields.*) as deal_fields
from deals
left join properties on deals.id = properties.deal_id
left join fields deal_fields on deal_fields.parent = 'deal' and deal_fields.parent_id = deals.id
group by deals.id, deals.name
order by deals.id
寫作大部分是相當直截了當。我遇到的問題是with properties as (...)
區塊。我已經試過類似:
DB::statement('WITH properties AS (...)')
->table('deals')
->select(' deals.*, json_agg(properties.*) as deal_properties, ')
...
->get();
但我發現後DB::statement()
執行停止是否有查詢生成器的方法,我很想念?我怎樣才能將我的查詢與WITH properties AS (...)
聲明加在一起?
我認爲還應該指出,我試圖實現一個存儲庫模式,我不能只圍繞整個查詢包裝DB::statement()
。
您是否嘗試過'DB ::選擇( '...')'? – fubar
試試這個:DB :: statement(DB :: raw('WITH properties AS(...)')) – yazfield