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'
]);
我有一个大问题,我不知道如何在不将“_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'
]);