propel - Category Hierarchy Using Nested Set -
i trying create category hierarchy using nested sets in propel. don't particularly care left/right stuff, want able define hierarchy.
i having problems propel complaining root node exists given scope though looking existing root node? i'm new propel , nested set model i'm not sure i'm doing wrong.
my table schema:
<table name="category"> <column name="id" type="integer" primarykey="true" autoincrement="true"/> <column name="name" type="varchar" size="250" required="true" primarystring="true"/> <behavior name="nested_set"> <parameter name="use_scope" value="true"/> <parameter name="scope_column" value="scope"/> <parameter name="left_column" value="left" /> <parameter name="right_column" value="right"/> <parameter name="level_column" value="level"/> </behavior> <foreign-key foreigntable="category" ondelete="cascade" onupdate="cascade"> <reference local="scope" foreign="id"/> </foreign-key> </table>
the function creating categories:
/** * takes array of category names. first name taken * root category , each name child of preceding * name. */ function createcategories(array $names) { $categories = []; $root = categoryquery::create() ->filterbyname($names[0]) ->filterbylevel(0) ->findoneorcreate(); if($root->isnew()) { $root->save(); $root->setscopevalue($root->getid()); } $categories[0] = $root; foreach($names $level => $name) { if($level == 0) { continue; } $category = categoryquery::create() ->filterbyname($name) ->filterbyscope($root->getscopevalue()) ->findoneorcreate(); if($category->isnew()) { $category->insertasfirstchildof($categories[$level - 1]); } $categories[$level] = $category; } return $categories; }
the issue definition of root node. assumed root node defined 1 level 0. looking @ generated code in fact defines root 1 it's left value 1.
to correctly have node defined root can call:
$root->makeroot()
this error goes away.
Comments
Post a Comment