我的脚本laravel雄辩如下:
$query = $this->item->select('a.*','b.attribute_code')
->from('items as a')
->join('attr_maps as b','b.number','=','a.number')
->groupBy('a.number');
foreach($param as $key => $value) {
$query = $query->having($key, '=', $value);
}
$query = $query->paginate(10);
我的$ param是动态的。它可以改变
如果$param
是array('number'=>'1234')
,它的确有效。没错
如果$param
是array('description'=>'test')
,则存在错误:Unknown column 'description' in 'having clause'
我尝试了表项中的所有字段。只有数字字段有效。显然是因为数字字段是分组的
如果使用having
,如何使items表中的所有字段都有效?
HAVING
子句在SELECT
语句中用于指定一组行或聚合的过滤条件。在HAVING
之后执行的SELECT
子句,所以如果你在HAVING
函数中不在group by
中的列上应用aggregate
那么它将在where中工作,这是没有用的,因为select子句已经执行了。而且我认为只是因为那个雄辩可能会引发异常,但不确定。
你可以做什么,检查你的param
密钥,如果它在group by
字段然后申请,如果没有然后添加为像这样的where
条件。
$query = $this->item->select('a.*','b.attribute_code')
->from('items as a')
->join('attr_maps as b','b.number','=','a.number')
->groupBy('a.number');
foreach($param as $key => $value) {
if($key== 'number'){
$query = $query->having($key, '=', $value);
}else{
$query = $query->where($key, '=', $value);
}
}
你可以在这里查看WHERE vs HAVING
这是因为Laravel的Eloquent ORM受到了活跃记录的启发,并且以数据库为中心。
最后,主要是因为having
is an sql concept用于过滤聚合结果中的行。
简而言之,您正在处理SQL语言中的问题补丁,而Eloquent ORM并没有将其抽象出来。