【问题标题】:Cakephp find threaded without "Children"Cakephp 发现没有“儿童”的线程
【发布时间】:2015-05-07 07:09:23
【问题描述】:

我正在设置一个 API,我宁愿只在我的数组中放置对象,而不是“Modelname”和“Children”在整个过程中反复出现。有没有办法做到这一点?我想一个循环可以解决问题,但我想不通。

      $results = $this->Test->find('threaded', array(
    'fields' => array('id', 'parent_id', 'name'),
      'order' => array('lft ASC') // or array('id ASC')
      ));

  for ($i = 0; $i <= $this->Test->childCount(1); $i++) {
  debug($results[$i]['children']);

  }

  $this->set(array(
    'results' => $results,
    '_serialize' => 'results'
    ));

【问题讨论】:

  • Cake 的哪个版本?您能否举例说明您正在使用的查找查询以及您希望结果的外观。
  • 更新了我的问题。
  • 您能否举例说明您希望结果数组的外观?您是否只是想要一个与父母处于相同深度的孩子的平面阵列?

标签: cakephp cakephp-2.0


【解决方案1】:

您提供的代码似乎对于 3.x 和 2.x 都不是唯一的,所以我将分享每个解决方案。

3.x

您可以通过将 'children' 作为查找器类型传入查询来获取树节点所有后代的平面列表:

$result = $this->Test->find('children', array(
    'for' => $record_id,   // Notice you have to specify 'for' key!
    'fields' => array('id', 'parent_id', 'name'),
    'order' => array('lft ASC')
));

如果您只想查找节点的直接子节点,请为选项数组中的“直接”键传递 true:

$result = $this->Test->find('children', array(
    'for' => $record_id,   // Notice you have to specify 'for' key!
    'fields' => array('id', 'parent_id', 'name'),
    'order' => array('lft ASC'),
    'direct' => true
));

更多信息:

3.x Cookbook for TreeBehavior

3.x findChildren() defined in API

3.x API Info for findChildren()

2.x

要获得 2.x 中所有后代的平面列表,您可以使用 TreeBehavior 类提供的 ->children() 函数:

$result = $this->Test->children(
    $record_id,                   // ID of record to find children for 
    false,                        // Direct = false 
    ['id', 'parent_id', 'name'],  // Fields to include in query
    'lft ASC'                     // Order
)

相反,如果只查找直系后代,则将第二个参数作为 true 传递:

$result = $this->Test->children(
    $record_id,                   // ID of record to find children for 
    true,                         // Direct = true 
    ['id', 'parent_id', 'name'],  // Fields to include in query
    'lft ASC'                     // Order
)

更多信息:

2.x Cookbook for TreeBehavior

2.x children() defined in API

2.x API Info for children()

CakePHP TreeBehavior 很好地抽象了处理树数据的许多麻烦。我希望这些信息对您有所帮助!

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多