我正试图从数据库中检索帖子中用户点赞的总数和数量。
现在,我正在发送两个不同的查询并检索结果。
但我希望将两个查询合并为一个查询,并仅从一个数据库请求中获得结果。
这就是我尝试的:
$userId = auth('sanctum')->user()->id;
$userLikesCountQuery = DB::table("likes")
->select('SUM(like) as user_count')
->where('user_id', $userId);
$data = DB::table("likes")
->select(
DB::raw('SUM(like) as count'),
$userLikesCountQuery,
)
->first();
return [
'meta' => [
'count' => $data->count ?? 0,
'user_count' => $data->user_count ?? 0,
],
];
这导致以下错误:stripos(): Argument #1 ($haystack) must be of type string, IlluminateDatabaseQueryBuilder given
Laravel在与Eloquent建立关系时也做了类似的事情。
我怎样才能做到这一点?
最终,它仍将运行两个单独的查询,不需要合并它们,如果单独获得它们,将更易于维护。
$user = auth('sanctum')->user();
$count = Like::sum('like');
$userCount = $user->likes()->sum('like');
return [
'meta' => [
'count' => $count,
'user_count' => $userCount,
],
];