Join table without id as column name - Cakephp 3

Join table without id as column name - Cakephp 3

我有一个大问题,我不知道如何在不将“_id”作为引用的列名称传递的情况下加入 table,并且还包括多个没有这个的 table约束。 比如我要加入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']);

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

Error: SQLSTATE[42P01]: Undefined table: 7 ERREUR: entrée manquante de la clause FROM pour la table « defauts » LINE 1: ...ces ReferentielTraces ON ReferentielTraces.code = Defauts.co... ^

这意味着“缺少 table "Defauts" 的 FROM 子句条目。

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

Error: SQLSTATE[42883]: Undefined function: 7 ERREUR: l'opérateur n'existe pas : integer = character varying LINE 1: ..._traces ReferentielTraces ON ReferentielTraces.id = (Defauts... ^

这意味着 "we can't compare integer and character varying " 因为他们试图比较 ReferentielTraces.id 和 Defauts.code_defaut

我也试过做一组像join([firstTable, secondTable ...])这样的join。但是我没有 Defauts、Traces、Quais 和 ReferentielTraces 的数据。

这里是table之间的关系:

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'   
        ]);

你能帮帮我吗?

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

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