首页 > 解决方案 > 加入没有 id 作为列名的表 - Cakephp 3

问题描述

我有一个大问题,我不知道如何加入一个表而不传递 '_id' 作为引用的列名,并且还包括多个没有此约束的表。比如我想加入 A.code = B.code_defaut

我尝试了两种方法:

       $cycle = $this->Cycles->find('all')
                             ->where(['Cycles.id'=>$id])
                             ->contain(['Quais',
                             'Defauts',
                             'Traces'])
                             ->join([
                                 'ReferentielTraces'=>[
                                     'table'=>'referentiel_traces',
                                     'type'=>'LEFT',
                                     'conditions'=>'ReferentielTraces.code = Defauts.code_defaut'
                                 ]
                             ]);
       $cycle = $this->Cycles->find('all')
                             ->where(['Cycles.id'=>$id])
                             ->contain(['Quais',
                             'Defauts',
                             'Traces',
                             'Defauts.ReferentielTraces']);

但在第一种情况下,我遇到了这个问题(是的,抱歉,这是法语 ^^ ):

错误:SQLSTATE[42P01]:未定义的表:7 ERREUR:entrée manquante de la Clause FROM pour la table « defauts » LINE 1: ...ces ReferentielTraces ON ReferentielTraces.code = Defauts.co ... ^

这意味着“缺少表“默认值”的 FROM 子句条目。

在第二种情况下,我有这个:

错误:SQLSTATE [42883]:未定义函数:7 ERREUR:l'opérateur n'existe pas:整数 = 字符变化第 1 行:..._traces ReferentielTraces ON ReferentielTraces.id =(默认... ^

这意味着“我们无法比较整数和字符变化”,因为他们正在尝试比较 ReferentielTraces.id 和 Defauts.code_defaut

我还尝试制作一组​​加入,如 join([firstTable, secondTable ...])。但我没有关于 Defauts、Traces、Quais 和 ReferentielTraces 的数据。

下面是表之间的关系:

Cycles:

        //Quais.id = Cycles.quai_id
        $this->belongsTo('Quais', [
            'foreignKey' => 'quai_id'
        ]);

        //Defauts.cycle_id = Cycles.id
        $this->hasMany('Defauts', [
            'foreignKey' => 'cycle_id'
        ]);

        //Traces.cycle_id = Cycles.id
        $this->hasMany('Traces', [
            'propertyName'=>'Traces',
            'foreignKey' => 'cycle_id',
        ]);

Defauts:

//Defauts.code_defaut = ReferentielTraces.code
$this->belongsTo('ReferentielTraces',[
            'className'=>'ReferentielTraces',
            'foreignKey' => 'code_defaut'   
        ]);

请问你能帮帮我吗?

标签: cakephp-3.0

解决方案


您可以使用 bindingKey ,它类似于以下内容:

//Defauts.code_defaut = ReferentielTraces.code
$this->belongsTo('ReferentielTraces',[
            'className'=>'ReferentielTraces',
            'foreignKey' => 'code_defaut',
            'bindingKey' => 'code'   
        ]);

推荐阅读