Yii Framework Forum: Probando Nested Set Behavior - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Probando Nested Set Behavior no he logrado que nestedsetbehavior funcione correctamente Rate Topic: -----

#1 User is offline   datevid 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 24-September 12

Posted 09 December 2012 - 12:21 PM

Buenas a todos los compañeros yii,
he estado probando la extensión nestedsetbehavior ubicada en la siguiente direccion
http://www.yiiframew...stedsetbehavior
la verdad no he entendido cómo es que funciona la extensión, a continuacion las dudas:
1. al crear el root
$root=new Root;
$root->title='Mobile Phones';
$root->saveNode();

sin embargo en la base de datos no menciona el campo title, tampoco existe tal Root como modelo, simplemente existe la tabla categoría.

Les agradezco anticipadamente.
0

#2 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 602
  • Joined: 30-July 09
  • Location:Colombia

Posted 09 December 2012 - 06:37 PM

Hola Datevid,
La extensión es una behavior, es decir, puede aplicarse a cualquier modelo, ... entonces en el ejemplo en cuestión se asume un modelo llamado "Root" que tiene una propiedad "title", además de las propiedades o campos propios de la extensión.

Saludos.
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#3 User is offline   datevid 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 24-September 12

Posted 09 December 2012 - 07:21 PM

View Postrobregonm, on 09 December 2012 - 06:37 PM, said:

Hola Datevid,
La extensión es una behavior, es decir, puede aplicarse a cualquier modelo, ... entonces en el ejemplo en cuestión se asume un modelo llamado "Root" que tiene una propiedad "title", además de las propiedades o campos propios de la extensión.

Saludos.

Hola robregonm, gracias por responder.
¿probaste la extensión?, me gustaría que lo pruebes y me aclares esta duda que tengo.
hasta donde yo tengo entendido Root forma parte de Category, o de donde sale esto?

$roots=Category::model()->roots()->findAll();


segun la linea arriba se está aplicando al modelo Category
0

#4 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 602
  • Joined: 30-July 09
  • Location:Colombia

Posted 10 December 2012 - 08:21 AM

View Postdatevid, on 09 December 2012 - 07:21 PM, said:

Hola robregonm, gracias por responder.
¿probaste la extensión?, me gustaría que lo pruebes y me aclares esta duda que tengo.
hasta donde yo tengo entendido Root forma parte de Category, o de donde sale esto?

$roots=Category::model()->roots()->findAll();


segun la linea arriba se está aplicando al modelo Category

Quote


Getting all roots
Using NestedSetBehavior::roots():

$roots=Category::model()->roots()->findAll();

Result:

Array of Active Record objects corresponding to Mobile phones and Cars nodes.



Esto dice la documentación, lo que indica que el behavior adiciona esa función o scope para devolver de Category, sólo los elementos raíces, es decir, que no tienen padres.

Saludos
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#5 User is offline   datevid 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 24-September 12

Posted 10 December 2012 - 12:59 PM

Robregonm,
no logro echar andar esta extensión...
podrías orientarme sobre qué tablas tengo que usar?
tengo entendido que la primera tabla a usar es category
CREATE TABLE `category` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `root` INT(10) UNSIGNED DEFAULT NULL,
  `lft` INT(10) UNSIGNED NOT NULL,
  `rgt` INT(10) UNSIGNED NOT NULL,
  `level` SMALLINT(5) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `root` (`root`),
  KEY `lft` (`lft`),
  KEY `rgt` (`rgt`),
  KEY `level` (`level`)
);

ahora necesito otra tabla clasificación?, en caso de que asi sea
que campos debe tener?
que hay de la tabla root?
Gracias Robregonm
0

#6 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 602
  • Joined: 30-July 09
  • Location:Colombia

Posted 11 December 2012 - 07:28 AM

Sí y No, básicamente lo que hay que hacer es que las tablas que necesiten tener el "anidamiento" o "jerarquía" o "nodos" deben incluir los campos de la extensión... que en el caso del ejemplo es la tabla Category, que asumo que tiene los campos:
* id // La llave primaria
* title // Este es de la tabla como tal
* lft //Nodo anterior, que puede ser NULL para los casos en que sea Root
* rgt // Nodo derecho
* level // Nivel

Saludos
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#7 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 602
  • Joined: 30-July 09
  • Location:Colombia

Posted 11 December 2012 - 07:31 AM

Creo que el asunto es más de comprensión de lo que es un behavior, que palabras más, palabras menos, es el método que utiliza yii para permitir herencia múltiple, porque internamente cuando una función o variable no existe en la clase como tal, entonces procede a buscarlas en los behaviors asociados al modelo.
Un behavior NO es un modelo en sí, ni es un controlador... es sencillamente una clase que contiene funciones y variables que pueden "adjuntarse" a otra clase para su posterior uso.
Podríamos verlo en cierto modo como los traits de PHP 5.4, pero para PHP 5.2 que no soporta este tipo de cosas.

Saludos.
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#8 User is offline   datevid 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 24-September 12

Posted 11 December 2012 - 03:51 PM

View Postrobregonm, on 11 December 2012 - 07:31 AM, said:

Creo que el asunto es más de comprensión de lo que es un behavior, que palabras más, palabras menos, es el método que utiliza yii para permitir herencia múltiple, porque internamente cuando una función o variable no existe en la clase como tal, entonces procede a buscarlas en los behaviors asociados al modelo.
Un behavior NO es un modelo en sí, ni es un controlador... es sencillamente una clase que contiene funciones y variables que pueden "adjuntarse" a otra clase para su posterior uso.
Podríamos verlo en cierto modo como los traits de PHP 5.4, pero para PHP 5.2 que no soporta este tipo de cosas.

Saludos.


Hola robregonm, gracia por la información logré hacer funcionar la extensión.

CREATE TABLE IF NOT EXISTS `clasificaciones` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `root` int(10) unsigned DEFAULT NULL,
  `lft` int(10) unsigned DEFAULT NULL,
  `rgt` int(10) unsigned DEFAULT NULL,
  `level` smallint(5) unsigned DEFAULT NULL,
  `nombre` varchar(100) NOT NULL,
  `descripcion` text,
  PRIMARY KEY (`id`),
  KEY `root` (`root`),
  KEY `lft` (`lft`),
  KEY `rgt` (`rgt`),
  KEY `level` (`level`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

y para crear un nuevo nodo se realiza de esta forma
$root = new Category();
$root->nombre = 'root'; 
$root->saveNode( false );

ahora si logré entender la funcionalidad y la forma de hacerlo(considerando que en la tabla category existe el campo nombre), sólo un único detalle; como modifico el nombre de un nodo ya creado? y como puedo crear un front-end para mostrar esto, si hay una extensión perfecto, y si no, bueno ahora puedo hacerlo con lo que tengo. Gracias una vez mas :D
0

#9 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 602
  • Joined: 30-July 09
  • Location:Colombia

Posted 13 December 2012 - 08:36 AM

Hola datevid,
No he usado la extensión, pero podría suponer que como cualquier otro modelo usando las funciones de CActiveRecord:
$model = Category::model()->findByPk($id); // o findByAttributes, o find()...
$model->nombre = 'Otro nombre';
$model->saveNode(false); // No estoy seguro si solo con save() funciona, tocaría leer la documentación al respecto.



Saludos.
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#10 User is offline   leo4all 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 31
  • Joined: 01-April 13
  • Location:Alajuela, Costa Rica

Posted 15 July 2013 - 05:18 PM

Hola a todos,
Digamos que tengo las tablas de productos y categorias con llave foranea, el problema que tengo es a la hora de eliminar categorias

Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails.

que puedo hacer en este caso.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users