当我使用 laravel 的 DB 外观进行简单连接时,我得到了与结果相同的行
Posted
技术标签:
【中文标题】当我使用 laravel 的 DB 外观进行简单连接时,我得到了与结果相同的行【英文标题】:I get the same row duplicated as the result when I do a simple join using the laravel's DB facade 【发布时间】:2021-11-09 00:49:54 【问题描述】:代码
$result = DB::table('disaster_rescue_data')
->join('users', 'disaster_rescue_data.username', '=', 'users.email')
->get();
问题
我有上面代码中提到的这个非常简单的连接。但是,当我在视图或dd
$result
上呈现数据时,我得到了相同的行重复,我不知道为什么。 (这些行包含相同的数据。)
(我使用的是 Laravel 5.4)
有人可以帮我找出原因吗? (我尝试了不同的技术,但都没有奏效!谢谢。)
【问题讨论】:
【参考方案1】:为防止重复,您应该使用distinct() 方法,该方法只返回结果中唯一的项目。
为了做到这一点,首先你必须严格选择你想要的:
$result = DB::table('disaster_rescue_data')
->select('disaster_rescue_data.*')
->join('users', 'disaster_rescue_data.username', '=', 'users.email')
->distinct()->get();
【讨论】:
我试过这个。但结果是一样的。我只得到结果。它给了我所有记录的同一行的结果。【参考方案2】:您可以尝试在查询中使用 distinct。 Distinct 删除结果集中的重复项。
例如
$result = DB::table('disaster_rescue_data')
->distinct()
->join('users', 'disaster_rescue_data.username', '=', 'users.email')
->get();
见https://laravel.com/docs/5.4/queries
编辑: 好的,我想您现在可以使用 groupBy 来获得独特的结果。虽然不清楚你的数据结构是什么,所以这是使用“users.email”的猜测。也许它可能是“disaster_rescue_data.username”来分组。实验看看。
$result = DB::table('disaster_rescue_data')
->distinct()
->join('users', 'disaster_rescue_data.username', '=', 'users.email')
->groupBy('users.email')
->get();
【讨论】:
我试过这个。但结果是一样的。我只得到结果。它给了我所有记录的同一行的结果。以上是关于当我使用 laravel 的 DB 外观进行简单连接时,我得到了与结果相同的行的主要内容,如果未能解决你的问题,请参考以下文章