2017-02-23 60 views
1

我知道我可以渴望或懶惰加載Laravel的關係。我也知道,關係對象是變相的基本查詢對象,並調用執行$user->load('teams')該查詢,並將其添加到$用戶對象(即使我不知道究竟怎麼了。)我可以在Laravel中加載屬性嗎?

說我有一個User誰從評論中獲得積分。如果我想加載它們一次全部

SELECT `user_id`, sum(`points`) AS `total_points` FROM `user_comments` where `id` = ? 

,我會運行此查詢:爲了讓用戶點一個數據庫調用,我將執行這樣的事情

SELECT `users`.*, sum(`user_comments`.`points`) AS `total_points` 
FROM `users` LEFT JOIN `user_points` ON `users`.`id` = `user_comments`.`user_id` 
GROUP BY `users`.`id` 

我想使用Laravel完成這些任務。我會像寫這樣的事情

User::where('age', '>', 40)->with('total_points')->get(); 

和訪問這樣

$user->total_points 

價值的同時加載用戶和他們的總分。我期望可能有許多記錄,並且不希望每次有用戶時總是調用數據庫連接查詢。如果我只需要他們的總分值,我也不希望爲每個用戶加載所有評論。

有沒有一種方法可以在Laravel中使用關係生成器來完成此操作?

回答

4

,讓您的用戶模型一個關係如下圖所示

public function total_points() { 
     return $this->hasOne('user_comments') 
      ->selectRaw('sum(points) as points, user_id') 
      ->groupBy('user_id'); 
    } 

然後爲此在控制器

$user = User::where('age', '>', 40)->with('total_points')->get(); 
+0

這工作!一旦我得到了這個工作,我添加了一個$ appends屬性來檢查關係是否已加載並獲取該值。 – whiterook6

+0

但是,如果它是一個屬性是不可能的!我必須爲此做些什麼? – shmoolki

相關問題