mysql - 检索满足第一个表条件的所有值
问题描述
我有两个表用户和位置。我需要加入两个表
我需要的是获取用户表中存在的所有用户的所有区域号。即用户 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
解决方案
这是执行此操作的两种方法。
首先,您可以使用 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
},
{
...
}
]
我想这会对你有所帮助。
推荐阅读
- javascript - 在jquery中将检索值更改为首字母大写
- logstash - 我找不到此警告(logstash)的原因:“beats 协议版本无效”
- javascript - 当 HTML 在内容可编辑 DIV 中更新时,Vanilla JavaScript 可保存和恢复插入符号位置
- python - 表单无法分配给函数调用
- facebook - 我可以直接从我的服务器上的 FB.login 使用访问令牌吗?
- javascript - 仅返回我的 JSON 对象的某些值
- flutter - 如何在颤动中创建一个微小的边缘分隔器
- go - 我可以在 Xeon Phi(Knight's Landing)处理器上编译 Go 程序吗?
- reactjs - 即使使用键集也能对唯一键警告做出反应
- python - 创建 AWS V4 签名 URL 以从 ScaleWay 对象存储中下载文件