PHP Doctrine 1.2 с использованием Nested Set, как перемещать узел в другой ситуации - PullRequest
2 голосов
/ 08 февраля 2011

Я использую вложенный набор с доктриной 1.2.

Вот мой пример.

Я получил это дерево

Category 1
   Category 1.1
   Category 1.2
   Category 1.3
   Category 1.4
Category 2
   Category 2.1
      Category 2.1.1
      Category 2.1.2
      Category 2.1.3

Ситуация 1 - как я могу переместить категорию 1.3 поверх категории 1.12 - Как я могу переместить категорию 1.4 ВНУТРИ категории 1,33 - Как я могу переехать 2.1 и его ребенок ВНУТРИ категории 1 и рядом с категорией 1.1

Ситуация 1 Даст мне:

Category 1
   Category 1.3
   Category 1.1
   Category 1.2
   Category 1.4
...

Ситуация 2 даст мне:

Category 1
   Category 1.1
   Category 1.2
   Category 1.3
      Category 1.4
...

Ситуация 3 даст мне:

Category 1
   Category 1.1
   Category 2
      Category 2.1
         Category 2.1.1
         Category 2.1.2
         Category 2.1.3
   Category 1.2
   Category 1.3
   Category 1.4

1 Ответ

2 голосов
/ 16 февраля 2011

См. http://www.doctrine -project.org / api / orm / 1.2 / doctrine / doctrine_node_interface.html

Обратите внимание, что ваш первоначальный вопрос был не совсем корректным: в случае 3) вы сказали, что хотите переместить только 2.1 в категорию 1, но в соответствии с примером, который вы дали для этого сценария, вы фактически хотели переместить всю категорию 2 внутри Категория 1.

Допустим, названные вами имена (категория 1.1) являются фактическим идентификатором категории, вот сценарии, которые вы описываете:

$cat11 = Doctrine_Core::getTable("Category")->find("Category 1.1");
$cat13 = Doctrine_Core::getTable("Category")->find("Category 1.3");
$cat14 = Doctrine_Core::getTable("Category")->find("Category 1.4");
$cat21 = Doctrine_Core::getTable("Category")->find("Category 2.1");

Перемещение 1.3 поверх категории 1.1:

$cat13->getNode()->moveAsPrevSiblingOf($cat11);

Перемещение 1.4 внутри 1.3:

$cat14->getNode()->moveAsFirstChildOf($cat13);

Перемещение всех категорий 2 в категорию 1 рядом с категорией 1.1:

$cat21->getNode()->moveAsNextSiblingOf($cat11);

Не забудьте сохранить категории после манипуляции, например, $ Cat11-> Save (). Достаточно сохранить категорию, которой вы манипулировали.

...