gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:47:45 24 4
gpt4 key购买 nike

我知道我可以在 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

同时加载用户和他们的总分。我希望可能有很多很多记录,并且不想每次有用户时都调用数据库连接查询。如果我只需要他们的总分值,我也不希望自己为每个用户加载所有评论。

有没有办法在 Laravel 中使用关系构建器来完成此任务?

最佳答案

在您的用户模型中建立如下关系

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

然后在 Controller 中执行此操作

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

关于php - 我可以在 Laravel 中急切/延迟加载属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com