Laravel查询生成器-在特定列上选择元素唯一或null
我有一个表格表格的模型Laravel查询生成器-在特定列上选择元素唯一或null,laravel,orm,eloquent,Laravel,Orm,Eloquent,我有一个表格表格的模型Form。有一个名为guid的列,它可以为null,也可以包含某种分组随机散列 我需要选择当前搜索中列guid为空或唯一的所有表单。换句话说,对于在当前搜索中重复guid值,我只选择每个guid哈希的第一次出现 我试过: $results = App\Form::where(... some where clauses .. ).groupBy('guid') 这几乎可以,但对于所有行,其中guid==NULL将它们分组并只选择一个(我需要所有行) 如何通过构建适当的SQ
Form
。有一个名为guid
的列,它可以为null,也可以包含某种分组随机散列
我需要选择当前搜索中列guid
为空或唯一的所有表单。换句话说,对于在当前搜索中重复guid
值,我只选择每个guid哈希的第一次出现
我试过:
$results = App\Form::where(... some where clauses .. ).groupBy('guid')
这几乎可以,但对于所有行,其中guid==NULL
将它们分组并只选择一个(我需要所有行)
如何通过构建适当的SQL查询或在PHP中过滤结果来获取唯一行或空行
注意:我需要我的$results
成为illumb\Database\elount\Builder
实例
编辑:
我发现我需要的查询的SQL版本是:
SELECT * FROM `forms` WHERE .... GROUP BY IFNULL(guid, id)
对于Laravel的数据库查询生成器,什么是等效查询 更新:使用
DB::raw
App\Form::where(... conditions ...)
->groupBy(DB::raw("IFNULL('guid', 'id')"));
或者另一种方式可以是:
您还可以使用以下命令合并两个集合(&A):
首先获取guid
按分组的结果(此处不包括null guid):
现在,获取guid
为null
的结果:
$all_guid_with_null = App\Form::whereNull('guid')->get();
最后,使用merge()
方法合并两个集合:
$filtered_collection = $unique_guid_without_null->merge($all_guid_with_null);
希望这有帮助 对于您编辑的问题,您可以使用as 因此,您的最终查询将如下所示:
$results = App\Form::where(... some where clauses .. )
->groupBy(DB::raw("IFNULL('guid', 'id')"));
通过上面的查询,您的
$results
将成为illumb\Database\elount\Builder
的一个实例,我不能使用get()
和merge()
-我需要$result
作为查询生成器Builder
实例,但您已经提到了-通过使用查询或使用php,所以get()
和merge()
都是php方法@Gacek-为什么你删除了我接受的答案?我已按你的要求正确地回答了!因为您在最后使用了get()
,因此它不再是Builder
instance@Gacek-所以你也可以说另一个人没有提到我提到的其他东西:(这不公平,随它去吧,不要打架,这个世界没有那么忠诚的人!是的,就是这样。它仍然是Builder
实例-这就是我要找的!谢谢
->groupBy(DB::raw("IFNULL('guid', 'id')"))
$results = App\Form::where(... some where clauses .. )
->groupBy(DB::raw("IFNULL('guid', 'id')"));