当我使用 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 外观进行简单连接时,我得到了与结果相同的行的主要内容,如果未能解决你的问题,请参考以下文章

来自DB的Laravel雄辩错误选择数据

如何让 laravel DB 连接到 php 连接?

使用 phpunit 进行 Laravel 测试

在 Laravel 中使用缓存外观时未显示 Redis 键

我的 Laravel 项目无法连接到 XAMPP 数据库

如何从 mac 连接到 aws Redshift db