2017-05-03 105 views
0

我在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()

+0

您是否嘗試過'DB ::選擇( '...')'? – fubar

+0

試試這個:DB :: statement(DB :: raw('WITH properties AS(...)')) – yazfield

回答

-1

,如果你想要一些數據從表中獲取你可以使用這種類型的代碼

$user = DB::table('table name')->where('name', 'John')->where('height','!>',"7")->select('table fields which you want to fetch')->get();

,或者嘗試使用該larevel雄辯ORM這將使事情與數據庫更容易。

更多的例子或參考

https://laravel.com/docs/5.0/queries