Вот реальный код:
if ($category->isNewRecord && empty($category->pid)) {
if ($category->saveNode()) $categorySaved = true;
}
elseif ($category->isNewRecord && !empty($category->pid)) {
$rootCategory = Categories::model()->findByPk($category->pid);
if ($category->appendTo($rootCategory) && $category->saveNode()) $categorySaved = true;
}
elseif (!$category->isNewRecord && empty($category->pid) && !$category->isRoot()) {
if ($category->moveAsRoot() && $category->saveNode()) $categorySaved = true;
}
elseif (!$category->isNewRecord && !empty($category->pid)) {
$rootCategory = Categories::model()->findByPk($category->pid);
if ($category->moveAsFirst($rootCategory) && $category->saveNode()) $categorySaved = true;
}
Как видно внутри каждого блока if не повторяющийся код, получается через OR не получится объеденить условия.