我试图从PHP和Laravel的MySQL数据库中获取唯一的行。
在我的数据库中,我有:
Email Errors Status
a@a.a error1 pending
a@a.a error2 pending
b@b.b error1 pending
b@b.b error1 pending
在我的脑海中,解决方案将是:
$transactions->unique('email', 'errors', 'status' )
但那回复了这个:
Email Errors Status
a@a.a error1 pending
b@b.b error1 pending
如果我尝试:
$transactions->unique(['email', 'errors', 'status'] )
情况更糟:
Email Errors Status
a@a.a error1 pending
我的完美解决方案就是这样,所以我可以看到每个用户的不同错误:
Email Errors Status
a@a.a error1 pending
a@a.a error2 pending
b@b.b error1 pending
这意味着基于多个列的唯一。
我到处搜索都没有成功,我希望有人可以提供帮助:)。
答案 0 :(得分:3)
你可以......
1)将自己的函数提供为unique
谓词:
$transactions->unique(function ($item) {
return $item['email'].'/'.$item['errors'].'/'.$item['status'];
});
...假设/
符号从未在任何一个字段中使用过。
2)或使用groupBy
方法在查询级别进行此类分组:
$DB::table('transactions')->select('email', 'errors', 'status')
->groupBy('email')
->groupBy('errors')
->groupBy('status')
->get();
我宁愿选择后者。