首页 > 解决方案 > 检索满足第一个表条件的所有值

问题描述

在此处输入图像描述

我有两个表用户和位置。我需要加入两个表

在此处输入图像描述

我需要的是获取用户表中存在的所有用户的所有区域号。即用户 1 在第二个表中有 3 个条目,所以我需要以 id1 = 1 area = 2,3 的方式加入表

区域 2 重复,所以不要包括它两次

我尝试了加入,但现在得到了正确的方法。

我试过什么?

    $location = User::
  join('addresses','users.id1','=','addresses.id1')                                    ->select('users.id1','addresses.area')
                    ->get();

预期产出

用户 1 -> 区域 ->2,3

标签: mysqllaravel

解决方案


这是执行此操作的两种方法。

首先,您可以使用 Laravel 关系:-

在您的模型中User创建关系:-

function addresses()
{
    return $this->hasMany(Address::class, 'id1', 'id1');
}

现在在您的用户控制器中,您可以获得这样的用户地址(区域)

$users = User::with('addresses')->get();
dd($users->toArray());

这将打印这样的东西

[
    {
        id1: 1,
        name: abaa
        pwd: 12345
        addresses: [
            {
                id2: 1,
                id1: 1,
                area: 2
            },
            {
                id2: 2,
                id1: 1,
                area: 3
            },
            {
                id2: 3,
                id1: 1,
                area: 3
            }
        ]
    },
    {
        ...
    }
]

其次,您可以使用 Laravel 关系:-

$builder = new User;
$builder->join('addresses','users.id1','=','addresses.id1')
    ->selectRaw("users.*, GROUP_CONCAT(DISTINCT addresses.area SEPARATOR ',') as distinct_areas")
    ->groupBy("users.id1")
    ->get();

这个查询会给你这样的结果

[
    {
        id1: 1,
        name: abaa,
        pwd: 12345,
        distinct_areas: 2,3
    },
    {
        ...
    }
]

我想这会对你有所帮助。


推荐阅读