2012-02-10 83 views
0

想象一下,我有2个模型:Item和Category。类别有许多项目和项目属于类别。获取每个类别中Item.name = bla的所有项目:如何?

我想获得一个阵列“逆转”如何CakePHP的正常返回它:我平时像

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

虽然我想是这样的:

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

...和等等

如何获得这个结果找到方法如果可能的话?否则,如何获得它?

我目前的模型要复杂得多,但我想我可以将这个teory应用于我的所有模型(我有一个Category => Group => Item关系)。

感谢您的建议和解答。

回答

1

根据问题的标题,如果问题的关键只是获取链接到名为'bla'的类别的项目,则可以在类别模型而不是项目模型上调用find()方法。

而不是

$this->Item->find('all', array('conditions' => array('Category.name' => 'bla'))); 

​​

这样,它会先筛选相应的类别,然后得到的链接项目。所以,你会获得类似

Array 
(
    [0] => Array 
    (
     [Category] => Array 
     (
      [id] => 1 
      [name] => bla 
      ... 
     ) 
     [Item] => Array 
     (
      [0] => Array 
      (
       [id] => 1 
       ... 
      ) 
      [1] => Array 
      (
       [id] => 2 
       ... 
      ) 
     ) 
    ) 
) 

编辑

随着连接在一起三款车型,它更复杂一些。我能想到的唯一的解决办法,以防止装载大量的数据是建立查询与内部联接:

$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') 
     )))); 

它会返回一个这样的数组:

Array 
(
    [0] => Array 
    (
    [Category] => Array 
    (
     [id] => 2 
     [name] => Shop 
    ) 
    [Item] => Array 
    (
     [id] => 1 
     [name] => Bla 
    ) 
) 
) 

EDIT2

关于数组结构的最后一句话你会得到:它不完全像你想要的。 Item数组与Array数组处于相同的级别。所以你可能会得到许多对同一类别的Category-Item对。

但是,一个简单的foreach循环可以让你用你想要的确切结构来构建一个数组,并且这个查询的优点是只需要从数据库中获得必要的东西。

+0

我写错了,对不起。我正在寻找Item.name,而不是Category.name。 – 2012-02-10 14:34:03

+0

我的错误也是,因为在再次读到你的问题之后,我意识到有一个Group模型介于你没有提到Array的例子中,这对于答案可能很重要。所以基本上,你有包含包含项目的组的类别,并且你想要得到的是包含包含名为'bla'的项目的组的类别? – nIcO 2012-02-10 14:56:07

+0

正是我想要的。我没有提到Group,因为我认为我可以使查询适用于Group-> Item,然后使其适用于Category-> Groups,如果它不是我会更新问题的话! – 2012-02-10 15:44:51

相关问题