Laravel:如何将两个不同的数据库查询合并为一个并访问结果



我正试图从数据库中检索帖子中用户点赞的总数和数量。

现在,我正在发送两个不同的查询并检索结果。

但我希望将两个查询合并为一个查询,并仅从一个数据库请求中获得结果。

这就是我尝试的:

$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,
],
];

最新更新