См. 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 (). Достаточно сохранить категорию, которой вы манипулировали.