Laravel 或 PHP 在多个条件下是唯一的 [英] Laravel or PHP unique with multiple conditions

查看:61
本文介绍了Laravel 或 PHP 在多个条件下是唯一的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆