あなたの質問のタイトルによると、「bla」というカテゴリにリンクされているアイテムだけを取得することになっている場合は、アイテムモデルではなくカテゴリモデルでfind()メソッドを呼び出すことができます。代わりに
$this->Item->find('all', array('conditions' => array('Category.name' => 'bla')));
の
は、それが最初に対応するカテゴリーをフィルタリングして、リンクされたアイテムを取得します
この方法を実行します。だから、あなたが一緒にリンク3つのモデルと
Array
(
[0] => Array
(
[Category] => Array
(
[id] => 1
[name] => bla
...
)
[Item] => Array
(
[0] => Array
(
[id] => 1
...
)
[1] => Array
(
[id] => 2
...
)
)
)
)
EDIT
ような何かを得るだろう、それは少し複雑です。
Array
(
[0] => Array
(
[Category] => Array
(
[id] => 2
[name] => Shop
)
[Item] => Array
(
[id] => 1
[name] => Bla
)
)
)
EDIT2
:
$categories = $this->Category->find('all', array('fields' => array('Category.id', 'Category.name', 'Item.id', 'Item.name'),
'joins' => array(
array( 'table' => 'groups',
'alias' => 'Group',
'type' => 'inner',
'conditions' => 'Group.category_id = Category.id'
),
array( 'table' => 'items',
'alias' => 'Item',
'type' => 'inner',
'conditions' => array('Item.group_id = Group.id', 'Item.name' => 'bla')
))));
それは、このような配列を返します:私は考えることができる唯一のソリューションは、データの多くは内部結合でクエリを構築することであるロード防ぐために
あなたが得る配列の構造に関する最後の言葉:あなたが望むのとまったく同じではありません。 Item配列はCategory配列と同じレベルにあります。だから、あなたは同じカテゴリーのカテゴリー項目の多くのペアで終わるかもしれません。
しかし、単純なforeachループでは、あなたが望む正確な構造を持つ配列を構築できます。このクエリは、データベースから必要なものだけを取得する利点があります。
私は間違って書いた、申し訳ありません。私はCategory.nameではなく、Item.nameを探しています。 –
私の間違いもあります。あなたに再度質問したあと、Arrayの例で言及していないグループモデルが存在することがわかっています。これはおそらく答えにとって重要です。したがって、基本的には、アイテムを含むグループを含むカテゴリがあり、「bla」というアイテムを含むグループを含むカテゴリを取得する必要がありますか? – nIcO
はい、まさに私が欲しいものです。 Group-> Itemのクエリーを作ってから、Category-> Groupsのために働かせると思ったので、私はグループについて言及しなかった。 –