检索所有满足第一个表条件的值

时间:2019-04-25 07:51:04

标签: mysql laravel

enter image description here

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

enter image description here

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

区域2正在重复,因此请勿重复两次

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

我尝试了什么?

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

预期产量

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

1 个答案:

答案 0 :(得分:2)

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

首先,您可以使用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
    },
    {
        ...
    }
]

我认为这会对您有所帮助。