我在拉威尔有个问题:
return $this->hasMany(Facility::class)
->select("id", "port_id", "facility",
DB::raw("(SELECT count('*') FROM port_facilities
WHERE has_it = 1) as has_it_true"),
DB::raw("(SELECT count('*') FROM port_facilities
WHERE has_it = 0) as has_it_false"))
->groupBy('facility');
如果一个港口有某些设施,它就算数。我现在的问题是 groupBy
不起作用。一切都算数而不是 grouping
按设施。你知道我该怎么解决这个问题吗?
2条答案
按热度按时间xqnpmsa81#
你在混合两种拉维成分。一个是与elowent的关系定义,另一个是使用querybuilder。
从查询开始,您的“调整”查询应该是以下几行中的某个:
如果您希望建立关系,那么在要指定关系的模型中,您应该执行文档中列出的操作:
https://laravel.com/docs/5.7/eloquent-relationships#defining-关系
建议:不要
count('*')
除非您真的需要(您可以计算一个或几个列并提高一些性能),否则不要将querybuilder与雄辩混合,除非您真的需要并且8zzbczxx2#
您需要在此处使用条件聚合:
这将对应于以下原始mysql查询:
请注意,我没有包括
id
以及port_id
在SELECT
子句,因为mysql可能不接受这些列。一般来说,在做GROUP BY facility
,我们只能选择facility
以及除facility
.