Laravel 或 PHP 在多个条件下是唯一的 [英] Laravel or PHP unique with multiple conditions
问题描述
我正在尝试从 PHP 和 Laravel 的 MySQL 数据库中获取唯一的行.
I'm trying to get the unique rows from a MySQL DB from PHP and Laravel.
在我的数据库中,我有:
In my DB I have:
Email Errors Status
a@a.a error1 pending
a@a.a error2 pending
b@b.b error1 pending
b@b.b error1 pending
在我看来,解决方案是:
In my head the solution would be:
$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
我的完美解决方案是这样,这样我就可以看到每个用户的不同错误:
My perfect solution would be this, so I can see the different errors from each user:
Email Errors Status
a@a.a error1 pending
a@a.a error2 pending
b@b.b error1 pending
这意味着基于多列的唯一性.
That means unique based on several columns.
我到处搜索都没有成功,希望有人能帮忙:)
I was searching everywhere without success, I hope somebody can help :)
推荐答案
你可以...
1) 要么提供您自己的函数作为 unique
谓词:
1) either provide your own function as unique
predicate:
$transactions->unique(function ($item) {
return $item['email'].'/'.$item['errors'].'/'.$item['status'];
});
... 假设 /
符号从未在任一字段中使用.
... assuming that /
symbol is never used in either field.
2) 或者在查询级别进行这样的分组,使用 groupBy
方法:
2) or make such a grouping on query level, using groupBy
method:
$DB::table('transactions')->select('email', 'errors', 'status')
->groupBy('email')
->groupBy('errors')
->groupBy('status')
->get();
我宁愿选择后者.
这篇关于Laravel 或 PHP 在多个条件下是唯一的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!