Sto usando CakePHP 3.x.Come unire più tabelle utilizzando CakePHP 3?
Quello che voglio è poter chiamare $ this-> Categories-> find() e quindi unire Argomenti su Topics.cat_id = Categories.id e quindi unire Post su Posts.topic_id = Topics.id.
Non ricevo errori, ma gli unici dati che sto recuperando sono i dati delle Categorie, ho provato a far entrare LEFT e INNER senza successo. Qualsiasi aiuto sarebbe molto apprezzato.
Le relazioni tra le tabelle sono:
CategoriesTable
$this->hasMany('Topics');
TopicsTable
$this->belongsTo('Categories');
$this->hasMany('Posts');
PostsTable
$this->belongsTo('Topics');
anche l'interrogazione che ho:
$query = $this->Categories->find('all')
->order(['Categories.name' => 'ASC'])
->join([
'topics' => [
'table' => 'Topics',
'type' => 'LEFT',
'conditions' => 'topics.Cat_id = Categories.id'
],
'posts' => [
'table' => 'Posts',
'type' => 'LEFT',
'conditions' => 'posts.topic_id = topics.id'
]
]);
provato ad utilizzare il comportamento contenibile, ma ora sto ottenendo l'errore "Categorie non è associato a messaggi" utilizzando questa query:
$query = $this->Categories->find('all')
->order(['Categories.name' => 'ASC'])
->contain(['Topics', 'Posts' => function($q){
return $q->where(['Posts.topic_id' => 'Topics.id']);
}]);
Cerca contenitori, non join manuali. ** http: //book.cakephp.org/3.0/en/orm/query-builder.html#loading-associations** – ndm
@ndm Grazie per la risposta. Ho aggiornato la mia domanda con i risultati utilizzando i contenimenti, eventuali suggerimenti? – Wisd0m
Dai un'occhiata più da vicino a come definire le associazioni annidate. – ndm