Laravel 获取具有不同列值的模型对象

Laravel 获取具有不同列值的模型对象,laravel,eloquent,laravel-5.4,Laravel,Eloquent,Laravel 5.4,我有一个应用程序表,包含用户id、电子邮件、电话等。。申请人可以创建或不创建用户帐户,因为注册是可选的;因此,用户id可以为空。它们还可能使用相同的电子邮件地址多次应用,在这种情况下,应用程序表中的电子邮件将跨多个记录复制 现在,目标是获取所有应用程序模型实例,不包括重复的实例。例句:如果杰克申请了五次jack@gmail.com,应用程序表将有5条记录,电子邮件列设置为jack@gmail.com. 在获取应用程序时,我只希望使用jack@gmail.com,其他四个应忽略不计 因此,我尝试了

我有一个应用程序表,包含用户id、电子邮件、电话等。。申请人可以创建或不创建用户帐户,因为注册是可选的;因此,用户id可以为空。它们还可能使用相同的电子邮件地址多次应用,在这种情况下,应用程序表中的电子邮件将跨多个记录复制

现在,目标是获取所有应用程序模型实例,不包括重复的实例。例句:如果杰克申请了五次jack@gmail.com,应用程序表将有5条记录,电子邮件列设置为jack@gmail.com. 在获取应用程序时,我只希望使用jack@gmail.com,其他四个应忽略不计

因此,我尝试了多种方法,但它们要么获取所有记录,要么根本不执行:

groupBy'email'使用get失败,因为未聚合列电子邮件:

Illumb\Database\QueryException,消息为“SQLSTATE[42000]:语法错误或访问冲突:选择列表的1055表达式2不在GROUP BY子句中,并且包含未聚合的列“applications.id”,该列在功能上不依赖GROUP BY子句中的列;这与sql\u mode=only\u full\u group\u by不兼容

同时,groupBy'email'->get['email']工作得很好,但问题是我需要创建其他列,至少在理想情况下是完整的应用程序模型实例

应用程序::其中'id',函数$query{$query->select'id'->groupBy'email';}->get返回表中的所有记录

应用程序::选择“*”,“不同的电子邮件”->在中获取结果

未找到列:“字段列表”中的1054未知列“不同的电子邮件”

雄辩的方法Application::distinct->get['email']给出了正确的电子邮件列表,但我需要更多的列来显示电子邮件。一旦我开始选择更多的列,我就会不断地将所有记录作为结果

由于启用了严格模式,以下所有查询均失败:

选择*从选择*从应用程序按id订购通过电子邮件描述为tmp组 从id插入的应用程序中选择*通过电子邮件从应用程序组中选择id 通过电子邮件从应用程序组中选择电子邮件、id、创建位置 有人能帮我找出正确的方法吗?如果雄辩能解决我的问题/局限性,我愿意使用雄辩并与实际模型一起工作,而不是stdObj或其他


另外,我使用的SQL引擎是启用了严格模式的MySQL。

首先,如果你想在你的雄辩中加入一个表达式,你必须使用DB::raw'DISTINCT email'来实现这一点

第二,我认为你应该采用这种方法:

Application::select('id', 'email', 'more_fields')->groupBy('email')->get();
在select函数中必须有按其分组的列

最后一个选择:

您可以在雄辩的查询中使用->distinct函数来删除重复项