微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用 join()

如何解决用 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 举报,一经查实,本站将立刻删除。