2016-12-10 34 views
0

如何使用查詢生成器在join子句中寫入原始表達式?Laravel查詢生成器原始表達式

SELECT 
    rating.post_id, 
    sum(rate_like), 
    sum(rate_dislike), 
    (sum(rate_like) + sum(rate_dislike)), 
    column_rating 
from rating 
inner join (
    select 
     post_id, 
     round(round((((sum(rate_like)/(sum(rate_like) + sum(rate_dislike)) * 100) * 0.5)/10) * 2)/2, 1) as column_rating 
    from rating group by post_id 
) as rating_table 
on rating.post_id = rating_table.post_id 
group by rating.post_id 

我已經嘗試實現它下面的方式,但它不工作:

DB::table('db_test')->table('rating') 
        ->join('rating_table', 'select ... from rating as rating_table') 
        ->raw('rating.post_id, 
          sum(rate_like), 
          sum(rate_dislike), 
          (sum(rate_like) + sum(rate_dislike)), 
          column_rating') 
+1

我問出於好奇成功進行查詢 - 你知道你想要什麼樣的SQL,知道如何處理Laravel - 爲什麼不簡單地創建一個MySQL視圖,創建一個讀取視圖的模型,並完全放棄將這個複雜的查詢移植到Laravel?這是可行的,但是,創建視圖需要花費5秒鐘,因爲您只需在「SELECT」前添加「CREATE VIEW view_name AS ...」,並且您將花費3行的代碼創建一個從它讀取的Eloquent模型。總共不到10秒的時間。 –

+0

順便說一句:你得到什麼錯誤?根據@ N.B的建議,我會使用上述方法。不僅僅是爲了簡單,而是改進了經驗和性能。除非你有其他特定的理由,否則這是我會同樣推薦的最好方法。 – nyedidikeke

+0

*如果您仍然在考慮使用「聯合」方法,請更新您的帖子,以避免使用您當前的方法得到的錯誤以及足夠的信息來複制您的場景以進一步觀察。* – nyedidikeke

回答

0

我能夠使用->join(DB()->raw('select...')