Laravel或PHP独特,具有多种条件

时间:2017-10-04 20:17:46

标签: php mysql laravel

我试图从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

这意味着基于多个列的唯一。

我到处搜索都没有成功,我希望有人可以提供帮助:)。

1 个答案:

答案 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();

我宁愿选择后者。