我知道我可以渴望或懒惰地加载Laravel中的关系。我也知道关系对象基本上是伪装的查询对象,并且调用$user->load('teams')
执行该查询并将其添加到$ user对象(即使我不知道具体如何。)
说我有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
同时加载用户及其总分。我希望可能有很多很多记录,并且不希望每次有用户时总是调用DB连接查询。如果我只需要他们的总分值,我也不想为每个用户加载所有评论。
有没有办法在Laravel中使用关系构建器来完成此任务?