如何解决用 join()
我有两张表,一张有两个外键,另一张有 id 和对应的主题。我想在我的控制器中创建一个函数,该函数返回一个包含表 1 中所有数据的数组,但主题 ID 应替换为另一个表中的实际主题。
我目前遇到的问题是我在数组中加入了两个具有相同元素名称的主题,导致其中一个覆盖了另一个。我怎样才能使它们都不同,或者它们只是覆盖数组中的 id。我希望这是有道理的,如果不是,请在评论中要求澄清。
我的两张桌子
表 1: (klasgenoten)
纳姆 | verplicht_profielvak1 | verplicht_profielvak2 | 等等。 |
---|---|---|---|
约翰 | 1 | 2 |
表 2:(verplicht_profielvakken)
id | profielvak |
---|---|
1 | 数学 |
2 | 科学 |
我的加入代码:
$builder = $db->table('klasgenoten'); // welke table gaat het over
$builder->join('verplicht_profielvakken','klasgenoten.verplicht_profielvak1 = verplicht_profielvakken.id');
$builder->select('klasgenoten.*,verplicht_profielvakken.profielvak');
$query = $builder->get();
$verplicht_profielvak1 = $query->getResultArray();
这将返回一个包含元素 verplicht_profielvak1 和 profielvak 的数组。问题在于,如果我想加入多个主题,它们会相互覆盖。示例:
在这种情况下,上表中的约翰只会有科学,因为那是一个重要的数学。
我尝试过的:
不同类型的连接,手动替换值的 foreach 循环,重新排列我的代码,尝试别名但效果不佳,查看了几个 stackoverflow 问题,我发现所有这些都不适用于我的情况。
有人知道怎么做吗?
解决方法
您必须对 klasgenoten 表的每一列使用连接。由于结果将存储在数组中,因此多个键将被覆盖。您必须为每个连接指定一个别名,如下所示:
$builder = $db->table('klasgenoten'); // welke table gaat het over
// Note the alias of the table here
$builder->join('verplicht_profielvakken as vp1','klasgenoten.verplicht_profielvak1 = verplicht_profielvakken.id');
// Note the alias of the table here
$builder->join('verplicht_profielvakken as vp2','klasgenoten.verplicht_profielvak2 = verplicht_profielvakken.id');
// Select profielvak from each join with an unique alias
$builder->select('klasgenoten.*,vp1.profielvak as profilevak1,vp2.profielvak as profilevak2');
$query = $builder->get();
$verplicht_profielvak1 = $query->getResultArray();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。