2012-02-10 5 views
0

私は2つのモデルがあります:アイテムとカテゴリがあります。カテゴリhasMany ItemsとItem belongsToカテゴリがあります。私は何かのようにしたい一方で通常私は各カテゴリのすべてのアイテムを取得します。ここで、Item.name = bla:どのように?

[Item] 
    ...some props... 
    [Category] 
     ...some props... 

ような何かを得る:

私は配列を取得したいと思いますがCakePHPは、通常、それを返す方法については「逆転」

Array 
    [0][Category] 
     Array 
      [0][Item] 
       ...some props... 
      [1][Item] 
    [1][Category] 

...とso

可能であればの方法でこの結果を得る方法はありますか?可能であればメソッドを探しますか?そうでなければ、それを得る方法?

現在のモデルははるかに複雑ですが、このモデルをすべてのモデルに適用できると思います(カテゴリ=>グループ=>アイテム関係があります)。

提案と回答ありがとうございます。

答えて

1

あなたの質問のタイトルによると、「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ループでは、あなたが望む正確な構造を持つ配列を構築できます。このクエリは、データベースから必要なものだけを取得する利点があります。

+0

私は間違って書いた、申し訳ありません。私はCategory.nameではなく、Item.nameを探しています。 –

+0

私の間違いもあります。あなたに再度質問したあと、Arrayの例で言及していないグループモデルが存在することがわかっています。これはおそらく答えにとって重要です。したがって、基本的には、アイテムを含むグループを含むカテゴリがあり、「bla」というアイテムを含むグループを含むカテゴリを取得する必要がありますか? – nIcO

+0

はい、まさに私が欲しいものです。 Group-> Itemのクエリーを作ってから、Category-> Groupsのために働かせると思ったので、私はグループについて言及しなかった。 –

関連する問題