我可以在Laravel中急切/延迟加载属性吗?

时间:2017-02-23 23:29:08

标签: php laravel-5 relationship eager-loading

我知道我可以渴望或懒惰地加载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中使用关系构建器来完成此任务?

0 个答案:

没有答案