CakePHP 3.xを使用しています。
私が欲しいのは、$ this-> Categories-> find()を呼び出して、Topics.cat_id = Categories.idのトピックに参加し、Posts.topic_id = Topics.idの投稿に参加できるようにすることです。
エラーは発生しませんが、返されるデータはカテゴリデータのみです。LEFTとINNERの結合を試みましたが成功しませんでした。どんな助けも大歓迎です。
テーブルの関係は次のとおりです。
カテゴリー表
$this->hasMany('Topics');
トピックス表
$this->belongsTo('Categories');
$this->hasMany('Posts');
PostsTable
$this->belongsTo('Topics');
また、私が持っているクエリ:
$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'
]
]);
包含可能な動作を使用してみましたが、次のクエリを使用して「カテゴリは投稿に関連付けられていません」というエラーが表示されます。
$query = $this->Categories->find('all')
->order(['Categories.name' => 'ASC'])
->contain(['Topics', 'Posts' => function($q){
return $q->where(['Posts.topic_id' => 'Topics.id']);
}]);
@ndmからのアドバイスにより、私は望んだ結果を得ることができました。私はドキュメントのセクションを見落としたに違いないので、この問題を抱えている他の人は、ここでそれを行う方法です。
$query = $this->Categories->find('all')
->order(['Categories.name' => 'ASC'])
->contain([
'Topics.Posts.Users'
]);
Cakephp2のレガシーを見つけるだけで、古いバージョンのようにjoinを使用できます。
$result = $this->Category->findAll(fields=>['id','Topic.id'], 'conditions'=>['Topic.name'=>'s'],'join'=>['Topic' => [
'table' => 'topics',
'type' => 'INNER',
'conditions' => 'Topic.category_id = Category.id'
]]);
おなじみですか?以前と同様にエイリアスを使用できます
初回の回答、コードエディターの動作がわからない、申し訳ありません。