2017-07-19 2 views
1

J'ai une table X connectée à la table Y à travers contenant Quand je veux joindre interne (correspondant) ceci avec la table Z en utilisant hasOne et une fonction. CakePHP se connecte automatiquement à la ligne par défaut par hasOne non existantCakephp 3.x hasOne insère la clé étrangère par défaut

public function initialize(array $config) 
{ 
    $this->belongsTo('Y', [ 
     'bindingKey' => 'initialen', 
     'foreignKey' => 'initialen' 
    ]); 

    $this->hasOne('Z'); 
} 

plus

public function search($c) 
{ 

    $query = $this->find('all')->contain('Y')->matching('Z', function ($q) use ($c) { 

     return $q->where(['Z.client_ID' => $c]); 
    }); 


    return $query; 


} 

Je reçois erreur

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Z.search_id' in 'on clause'

Répondre

0

Ok, je l'ai trouvé la solution moi-même

$this->hasOne('Z',[ 
'foreignKey' => false 
]); 
0

Si Z.search_id n'existe pas, vous devez spécifier une autre clé étrangère qui existe:

$this->hasOne('Z',[ 
    'foreignKey' => 'some_key' 
]); 

Plus d'info: CakePHP hasOne association

+0

correcte, mais que cette volonté ajoute également à la requête. Ce que je ne veux pas. Disons que je précise le foreignKey comme 'team_id' DE '' archief' searches' INNER JOIN '' archief_Z' Z' ON ( 'Z'.'client_ID' = 81 ET' searches'.'ID '= (' Z'.''team_ID') ) LEFT JOIN 'archief_Y'' Y' ON 'Y'.'initialen' = (' recherches'.'initialen') – Joost