gpt4 book ai didi

laravel - 如何在laravel中的多个关系上获得withCount的总和

转载 作者:行者123 更新时间:2023-12-04 14:19:53 26 4
gpt4 key购买 nike

我有一个基本的三张表 users 和 guests 以及 posts

我还有一个名为 user_views 的表:存储独特用户对帖子的看法

post_id   user_id
1 10002
2 10003
3 10011

还有另一个名为 guest_views 的表:存储独特的客人对帖子的看法

post_id   guest_id
1 10002
2 10003
3 10011

在 Post 模型中我有:

public function user_views()
{
return $this->hasMany('App\Models\PostUserView');
}

public function guest_views()
{
return $this->hasMany('App\Models\PostGuestView');
}

在下面的代码中得到正确的结果,但是使用了两个不同的键。

$posts = Post::all()
->withCount('user_views')
->withCount('guest_views')

我想合并 user_views 和 guest_views 然后计算计数如下,但结果只包括 user_views 的计数

public function views()
{
return $this->user_views()->unionAll($this->guest_views());
}

执行以下代码后

$posts = Post::all()
->withCount('views')
->withCount('user_views')
->withCount('guest_views')

我得到了这个结果

"views_count": 5, 
"user_views_count": 5,
"guest_views_count": 2,

prevues 示例的预期结果是:

"views_count": 7, 
"user_views_count": 5,
"guest_views_count": 2,

我也尝试使用如下的sql查询

public function views()
{
return DB::raw("(select * from post_views) union all (select * from post_guest_views)");
}

但是得到

"Call to undefined method Illuminate\Database\Query\Expression::getRelationExistenceCountQuery()"

所以我想获得所有用户和 guest 对每个帖子的总浏览量。

最佳答案

在你的Post模型中

public function user_views()
{
return $this->hasMany('App\Models\PostUserView','user_id','id');
}

public function guest_views()
{
return $this->hasMany('App\Models\PostGuestView','user_id','id');
}

public function views()
{
return $this->user_views()->unionAll($this->guest_views());
}

现在你可以访问了

$posts = Post::withCount(['user_views','guest_views','views'])->get()

注意

Every parameter that is specified in withCount() method, becomes main object’s _count property. So in this case, we will have $posts->guest_views_count,$posts->views_count and $posts->user_views_count variables.

希望它对你有用。

关于laravel - 如何在laravel中的多个关系上获得withCount的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56237338/

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