Cakephp 获取Item.name=bla的每个类别中的所有项目:如何获取?

Cakephp 获取Item.name=bla的每个类别中的所有项目:如何获取?,cakephp,Cakephp,假设我有两个模型:项目和类别。类别有许多项目,项目属于类别 我想获得一个数组,它“反转”了cakephp通常如何返回它:通常我得到 [Item] ...some props... [Category] ...some props... Array ( [0] => Array ( [Category] => Array ( [id] => 1 [name] =>

假设我有两个模型:项目和类别。类别有许多项目,项目属于类别

我想获得一个数组,它“反转”了cakephp通常如何返回它:通常我得到

[Item]
    ...some props...
    [Category]
        ...some props...
Array
(
  [0] => Array
    (
      [Category] => Array
        (
          [id] => 1
          [name] => bla
          ...
        )
      [Item] => Array
        (
          [0] => Array
            (
              [id] => 1
              ...
            )
          [1] => Array
            (
              [id] => 2
              ...
            )
        )
    )
)
而我想要的是:

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

如果可能,如何使用查找方法获得此结果?否则,如何获得它

我当前的模型要复杂得多,但我认为我可以将这个理论应用到我所有的模型中(我有一个Category=>Group=>Item关系)


感谢您的建议和回答。

根据您问题的标题,如果要仅获取链接到名为“bla”的类别的项目,您只需在类别模型而不是项目模型上调用find()方法

而不是

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

这样,它将首先过滤相应的类别,然后获得链接的项目。所以你会得到类似的结果

[Item]
    ...some props...
    [Category]
        ...some props...
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

关于您将得到的数组结构的最后一句话:它与您想要的不完全一样。项目数组与类别数组处于同一级别。因此,对于同一类别,您可能会得到多对类别项


但是,一个简单的foreach循环将允许您使用所需的精确结构构建一个数组,而此查询的优点是只从数据库中获取必要的内容。

我写错了,对不起。我要找的是Item.name,不是Category.name。这也是我的错误,因为在再次阅读了您的问题之后,我意识到中间有一个组模型,您在数组示例中没有提到,这可能对答案很重要。所以,基本上,你们有包含包含项目的组的类别,你们想要的是得到包含项目的组的类别,叫做“bla”?是的,这正是我想要的。我没有提到组,因为我认为我可以使查询适用于组->项目,然后使其适用于类别->组,如果不是这样,我会更新问题,所以!我编辑了我的答案,给出了一个三个模型链接在一起的解决方案,看起来你的解决方案运行得很好!!非常感谢:)