如何选择特定字段,包括 withCount

Luc*_*ois 4 laravel eloquent

我正在尝试返回特定列,包括reviews_count 列。

这是未优化的查询(工作):

Model::withCount('reviews')->get();
Run Code Online (Sandbox Code Playgroud)

这是我试图实现的目标(不起作用):

Model::withCount('reviews')->select('id','name','reviews_count')->get();
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能使用 eloquent 在选择查询中包含reviews_count?

Muh*_*kur 13

withCount方法将添加一个额外的自定义选择,因此无需将其包含在您的选择方法中。只需将select方法放在 之前withCount,如下例所示:

Model::select('id','name')->withCount('reviews')->get();
Run Code Online (Sandbox Code Playgroud)

上面将生成以下查询:

select "id", "name", (select count(*) from "reviews" where "invoices"."id" = "reviews"."invoice_id") as "reviews_count" from "invoices" 
Run Code Online (Sandbox Code Playgroud)

如果将该select方法放置在其他选择之后,例如withCount,它将覆盖或替换它们。另一种方法是使用该addSelect方法,但您仍然需要删除默认的选择,如下所示:

Model::select([])->withCount('reviews')->addSelect('id','name')->get();
Run Code Online (Sandbox Code Playgroud)