【问题标题】:Replace element in array instead of making new one with join()替换数组中的元素,而不是用 join() 创建新元素
【发布时间】:2021-09-08 17:28:34
【问题描述】:

我有两张表,一张有两个外键,另一张有 id 和对应的主题。我想在我的控制器中创建一个函数,它返回一个包含表 1 中所有数据的数组,除了应该用另一个表中的实际主题替换的主题 ID。

我目前遇到的问题是我在数组中加入了具有相同元素名称的两个主题,导致其中一个覆盖了另一个。我怎样才能使它们都不同,或者它们只是覆盖数组中的 id 。我希望这是有道理的,如果没有,请在 cmets 中要求澄清。

我的两张桌子

表 1:(klasgenoten)

naam verplicht_profielvak1 verplicht_profielvak2 etc..
john 1 2

表 2:(verplicht_profielvakken)

id profielvak
1 math
2 science

我的加入代码:

$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 的数组。这样做的问题是,如果我想加入多个主题,它们会相互覆盖。示例:

在这种情况下,上表中的 John 将只有科学,因为它覆盖了数学。

我尝试过的:

不同类型的连接,手动替换值的 foreach 循环,重新排列我的代码,尝试了别名但效果不佳,查看了几个 stackoverflow 问题,我发现所有这些问题都不适用于我的情况。

有人知道怎么做吗?

【问题讨论】:

    标签: php database join foreign-keys codeigniter-4


    【解决方案1】:

    您必须为 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();
    

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      相关资源
      最近更新 更多