Bonjour a tous et toutes,
Voila j ai un petit soucis sûrement très débile mais je ne trouve pas comment faire, j'utilise le composant 'Tree' et j aimerai ajoute une categorie sans parent_id quand je le met a null ou 0 ca ne fonction pas... pourtant si je lui met une valeur la il n'y a aucun soucis.
Que doit on mettre au parent_id pour le mettre au plus haut niveau.
Merci de votre aide pour cette question surement tres bete =$
Dans ton cas l'id de la table correspond a l'id du joueur? esque c'est quand meme en clef primaire? ça peut peutetre creer des problème
le fait que lft et rgh sont a 0 est effectivement un bug.
sinon pour pas te prendre la tete tu creer une entrée Root avec une id particuliere dans ta bdd eout test t élément qui sont au top sont en fait des enfant de Root ça peut etre pratique pour plein de truc en plus.
Si tu ne veux pas cette solution tu peut aussi essayé de faire un $this->Model->recover(); apres ton save.
Salut à toi, en parent_id on doit effectivement mettre un 0. Peux-tu nous afficher un bout de ton code et la structure en base ?
voici mon code:
$d'Joueur']'id'] = $this->Auth->user('id');
$d'Joueur']'login'] = $this->Auth->user('login');
$d'Joueur']'statut'] = 'membre';
$d'Joueur']'etat'] = 'protection';
$alliance = $this->Alliance->find('first', array(
'conditions' => array('name' => $d'Alliance']'name']),
'recursive' => -1,
'fields' => array('id')
));
$d'Joueur']'alliances_id'] = $alliance'Alliance']'id'];
$id = $this->Role->find('first', array(
'conditions' => array('name' => 'Roi'),
'recursive' => -1));
$d'Joueur']'roles_id'] = $id'Role']'id'];
$d'Joueur']'parent_id'] = NULL;
$this->Joueur->save($d);
et ma base de donnee:
CREATE TABLE IF NOT EXISTS `joueurs` (
`id` int(11) NOT NULL,
`login` varchar(45) default NULL,
`statut` varchar(45) default NULL,
`etat` varchar(50) default NULL,
`ligne` varchar(45) default NULL,
`created` datetime default NULL,
`alliances_id` int(11) default NULL,
`roles_id` int(11) default NULL,
`impot` int(11) NOT NULL,
`lft` int(11) NOT NULL,
`rght` int(11) NOT NULL,
`parent_id` int(11) default NULL,
`prod_or` int(11) NOT NULL,
`prod_nourriture` int(11) NOT NULL,
`prod_bois` int(11) NOT NULL,
`prod_pierre` int(11) NOT NULL,
`prod_chevaux` int(11) NOT NULL,
`prod_PC` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `login_UNIQUE` (`login`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Je me permet de demander aussi pour le generateTreeList comment faire pour avoir le login sous forme de liste?
Merci de votre aide
Dans ton model est ce que tu as bien mis : $actsAs = array('Tree'); ?
Mets plutôt '0' pour parent_id au lieu de NULL.
public $actsAs = array('Containable', 'Tree');
et meme avec '0' ca ne va pas :s
$d'Joueur']'parent_id'] = '0';
Après vérification tu peux mettre NULL en fait ^^.
Sinon tout me parait correct je ne vois pas pourquoi ton insertion ne fonctionne pas... Tu n'as vraiment pas d'insertion en base qui se fait ? Regarde dans les logs si tu n'as pas une erreur.
si si justement tout le reste se met bien mais pour lft et rght il met 0 et parent_id il met null...
A bin c'est normal sa ! Si tu n'a pas de catégorie dans ta nouvelle catégorie il ne te modifiera pas lft et rght. Si tu ajoutes une catégorie à l'intérieur par contre il va s'en occuper tout seul normalement.
non ca ne fonctionne pas il doit directement les mettrent convenablement meme si la categorie est au niveau supperieur.
Il faut que l'id_parent que tu lui renseigne corresponde à la catégorie parente. C'est le cas ?
oui oui cela ca marche sans soucis mais si je veux ajouter une categorie qui n'a pas de parent la ca plante.
Sa plante c'est à dire ? Tu n'as pas une erreur sur ta page ou dans les logs ? Met ton debug en niveau 2 peut être aussi pour afficher les erreurs si l'application t'en retourne.
Je m'exprime mal dsl, que je dis que ca plante en fait ca enregistre bien dans la bdd mais ca met lft et rght a 0 du coup l arbre n'est plus respecter :s
Sinon aucunes erreurs dans les logs ni sur la page.
Mais si c'est bon ^^. En fait sa met 0 parce que tu n'as pas de sous catégorie. Le lft et rght changeront quand tu aura une sous catégorie à l'intérieur.
Pourtant, quand je rentre 2 enregistrements:
or si je met l'id 23 en sous categorie de l id 26 ca me donne:
Ce n'est pas a toi de spécifier les lft et rght sinon tu vas le perdre.
Tu as uniquement un save à faire en spécifiant l'id_parent.
Si tu veux mettre l'id 26 dans l'id 23, tu fais un save de ta catégorie 26 avec id_parent = 23 et rien de plus à par son nom etc...
Sa devrait donc te faire quelque chose du genre :
id 23 => parent_id : 0 | lft : 1 | rght : 2
id 26 => parent_id : 23 | lft : 0 | rght : 0
oui oui ici c est ce que la bdd écrit moi je ne spécifie que le parent_id.
et normalement ca ne doit pas donner:
id 23 => parent_id : 0 | lft : 1 | rght : 4
id 26 => parent_id : 23 | lft : 2 | rght : 3
Possible je n'ai plus le fonctionnement exact des lft/rght en tête. Mais quand tu fais un generateTreeList sa te donne la bonne arborescence ?
Lorsque les 2 categories sont sans parent id ca me donne ca:
Array
(
[25] => 25
[23] => -------->23
)
lorsque je met une en dessous de l autre ca me donne:
Array
(
[23] => 23
[25] => 25
)
oO Bin la je comprend pas... Si tes parent_id sont renseignés comme il faut il n'y a aucune raison que sa ne sorte pas les bons résultats...
sur le premiere test les 2 parent_id etait nul et les 2 lft et rght etait a 0
sur le 2ieme:
id lft rght parent_id
25 2 2 NULL
23 0 1 25
Oui l'id est bien primaire mais pas en AUTO_INCREMENT.
En effet l'idee du root serai un super alternative pour moi je pense que je vais faire avec le root. Un enorme merci pour l'aide.