Domanda

I'm trying to save a node with the extension "NestedSetBehvaior": http://www.yiiframework.com/extension/nestedsetbehavior/

But it is not saving anything in the database..

I tried using the schema that comes with the extension (extensions/yiiext/behaviors/trees/schema.sql)..

I also added the "title" column which was not included.

I then generated the Controller, Model & CRUD with Gii and added this to the newly created Model: Category.php

    public function behaviors()
    {
        return array(
            'nestedSetBehavior'=>array(
                'class'=>'ext.yiiext.behaviors.model.trees.NestedSetBehavior',
                'leftAttribute'=>'lft',
                'rightAttribute'=>'rgt',
                'levelAttribute'=>'level',
            ),
        );
    }

I Also placed the NestedSetBehavior.php in protected/extensions/yiiext/behaviors/model/trees/

And then I added this to the controller indexAction:

$root=new Category;
$root->title='Mobile Phones';
$root->saveNode();

What could possibly be wrong?

And also, which method would you recommend for storing multiple trees for multiple users (3000+)? Imagine a tree with unlimited depth..

È stato utile?

Soluzione

I've managed to find the solution on my own. The problem was in the model 'Category'. I changed the validation rules so that 'lft', 'rgt' and 'level' are not required, since these are automatically added by NestedSetBehavior.

Before change:

/**
 * @return array validation rules for model attributes.
 */
public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('lft, rgt, level', 'required'),
        array('level', 'numerical', 'integerOnly'=>true),
        array('root, lft, rgt', 'length', 'max'=>10),
        // The following rule is used by search().
        // Please remove those attributes that should not be searched.
        array('id, root, lft, rgt, level', 'safe', 'on'=>'search'),
    );
}

After Change:

/**
 * @return array validation rules for model attributes.
 */
public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        //array('lft, rgt, level', 'required'),
        array('level', 'numerical', 'integerOnly'=>true),
        array('root, lft, rgt', 'length', 'max'=>10),
        // The following rule is used by search().
        // Please remove those attributes that should not be searched.
        array('id, root, lft, rgt, level', 'safe', 'on'=>'search'),
    );
}

It's working perfectly now.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top