/** * Returns nested data set * * @param int|null $rootNode Id of top item * @return array */ public function generateNestedData($rootId = null) { $conditions = array(); $fields = null; $order = $this->alias . '.lft ASC'; $recursive = -1; $results = $this->find('all', compact('conditions', 'fields', 'order', 'recursive')); return Hash::nest($results, array('root' => $rootId)); }
public function dbFix() { $eTree = Hash::nest($this->Election->children('53c021ec-e11c-49be-b6c8-5c5aacb5b862', false, array('id', 'parent_id', 'name'))); $elections = array(); foreach ($eTree as $town) { foreach ($town['children'] as $cunli) { $elections[$cunli['Election']['id']] = "{$town['Election']['name']} > {$cunli['Election']['name']}"; } } $bulletins = $this->Election->Bulletin->find('all', array('conditions' => array('count_elections' => 0, 'name like' => '%雲林縣 > 村里長%'))); foreach ($bulletins as $bulletin) { $bulletinMatched = false; foreach ($elections as $electionId => $filter) { if (false === $bulletinMatched && false !== strpos($bulletin['Bulletin']['name'], $filter)) { $bulletinMatched = true; if ($this->Election->Bulletin->save(array('Bulletin' => array('id' => $bulletin['Bulletin']['id'], 'count_elections' => 1)))) { $this->Election->save(array('Election' => array('id' => $electionId, 'bulletin_key' => $bulletin['Bulletin']['id']))); $this->Election->BulletinsElection->create(); $this->Election->BulletinsElection->save(array('BulletinsElection' => array('Election_id' => $electionId, 'Bulletin_id' => $bulletin['Bulletin']['id']))); } } } } }
/** * In the event of ambiguous results returned (multiple top level results, with different parent_ids) * top level results with different parent_ids to the first result will be dropped * * @param string $state * @param mixed $query * @param array $results * @return array Threaded results */ protected function _findThreaded($state, $query, $results = array()) { if ($state === 'before') { return $query; } $parent = 'parent_id'; if (isset($query['parent'])) { $parent = $query['parent']; } return Hash::nest($results, array('idPath' => '{n}.' . $this->alias . '.' . $this->primaryKey, 'parentPath' => '{n}.' . $this->alias . '.' . $parent)); }
/** * Tests that nest() throws an InvalidArgumentException when providing an invalid input. * * @expectedException InvalidArgumentException * @return void */ public function testNestInvalid() { $input = array(array('ParentCategory' => array('id' => '1', 'name' => 'Lorem ipsum dolor sit amet', 'parent_id' => '1'))); Hash::nest($input); }
/** * test Hash nest with no specified parent data. * * The result should be the same as the input. * For an easier comparison, unset all the empty children arrays from the result * * @return void */ public function testMissingParent() { $input = array(array('id' => 1), array('id' => 2), array('id' => 3), array('id' => 4), array('id' => 5), array('id' => 6), array('id' => 7), array('id' => 8), array('id' => 9), array('id' => 10)); $result = Hash::nest($input, array('idPath' => '{n}.id', 'parentPath' => '{n}.parent_id')); foreach ($result as &$row) { if (empty($row['children'])) { unset($row['children']); } } $this->assertEquals($input, $result); }
/** * Tests that nest() returns an empty array for invalid input instead of throwing notices. * * @return void */ public function testNestInvalid() { $input = array(array('ParentCategory' => array('id' => '1', 'name' => 'Lorem ipsum dolor sit amet', 'parent_id' => '1'))); $result = Hash::nest($input); $this->assertSame(array(), $result); }