Salut à tous , j'ai une table posts qui porte une association réflexive . je vous explique : u n post peut être lier à plusieurs autre posts , et je veux représenté ce model avec les conventions cakephp . Si quelqu'un à une idée , sa sera la bienvenue. je vous joint l'image
Merci d'avance
de type 1 - n sur la meme table ?
Si oui ca ce gere comme si tu avias 2 tables differentes, a la difference c est que dans ton belongsTo au lieu de mettre 'Post' tu lui donne un allias
Exemple:
<?php
class Post extends AppModel {
$belongsTo = array(
'unAlliasDePost' => array('className' => 'Post')
);
$hasMany = array(
'unAutreAlliasDePost' => array('className' => 'Post')
);
}
Et donc tu utiliseras les allias :)
oki , mikachu j'essai ta methode , mais pour les table dans la base de donnée , le id de la relation et la clé etranger peuvent se nommé comment ?
Ah attends zut je me suis planté ....
J'ai mal lu ton post et zappé le mot PLUSIEURS....
Je tentes de voir ca dans la journée si j ai quelques minutes
<u>EDIT:</u>
Enfin de compte ils faudrait faire un HABTM entre posts et posts en utilisant les "allias" comme precedemment...
Exemle:
<?php
class Post extends AppModel {
public $hasAndBelongsToMany = array(
'AlliasPost1' =>
array(
'className' => 'Post',
'joinTable' => 'posts_posts',
'associationForeignKey' => 'post1_id'
),
'AlliasPost2' =>
array(
'className' => 'Post',
'joinTable' => 'posts_posts',
'associationForeignKey' => 'post2_id'
),
);
}
Et faire une table de liaison comme:
CREATE TALE posts_posts (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, // permettra la suppression de la liaison
post1_id INT NOT NULL, // id de AlliasPost1
post2_id INT NOT NULL, // id de AlliasPost2
);
Dans la table posts par contre aucun champ de foreignKey étant donné que c'est une liaison N - N et que les foreignKey sont dans posts_posts.
Apres rien ne t’empêche, comme j'ai vus dans un autre tuto de Grafikart, de faire un benlongsTo dans le model Post entre posts et posts_posts. De mémoire ca permet de gerer quelques petits trucs en plus et aussi d'éviter certains problemes, ou encore faire une suppression dans posts_posts en fonction de sa clé primaire.
Je t'induis peut être en erreur mais tente le coup. Sans doute ajouter d'autres éléments au tableau du HABTM. Voici le lien de la doc CAKEPHP pour le HABTM
Merci mikachu , je vois ce que tu veut , je tente le coup , si c'est ok , je ferai le retour pour que d'autre personne puisse l'utiliser si besoin
je viens de vois une methode qui pourrai bien m'aider
class Post extends AppModel {
public $name = 'Post';
public $belongsTo = array(
'Parent' => array(
'className' => 'Post',
'foreignKey' => 'parent_id'
)
);
public $hasMany = array(
'Children' => array(
'className' => 'Post',
'foreignKey' => 'parent_id',
)
);
}
et dans ce cas la table post sera
CREATE TALE posts_posts (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, // permettra la suppression de la liaison
parent_id INT NOT NULL,
post_id INT NOT NULL
);
et pour recupérer un tableau imbriqué d’enregistrement compte tenu de la clef parent_id , on peut utilser la fonction
$this->Post-> find(‘threaded’)
Si je me trouve pas voila le lien Texte du lien
Sans doute, mais dans ce cas la tu te retrouves donc avec une relation 1 - N, et non N - N. Et donc la table posts_posts ne te servira pas a grand chose dans ton cas.
Pourquoi ?
Tout simplement parce que ton belongsTo appel le model Post donc la table posts, et ton hasMany fait de meme.
Donc je penses qu'enfin de compte ta/ma méthode 1 fera l'affaire.
A savoir:
// Table posts:
CREATE TABLE posts (
id INT NOT NULL AUTO_INCREMNENT PRIMARY KEY,
name VARCHAR(255),
content TEXT,
parent_id INT NOT NULL DEFAULT 0
// Clé etrangère qui fera office de liaison dans ta table post
// et ainsi trouver le post parent par rapport à son id.
// Valeur a 0 : Si différent de 0 alors il a un parent. (C'est toi qui voit pour ca)
);
<?php
class Post extends AppModel {
public $name = 'Post';
public $belongsTo = array(
'Parent' => array(
'className' => 'Post',
'foreignKey' => 'parent_id'
)
);
public $hasMany = array(
'Children' => array(
'className' => 'Post',
'foreignKey' => 'parent_id'
)
);
}
PS:
Par contre n'oubli pas qu'avec cette méthode tu ne pourras associé un Post enfant qu'a un seul Post Parent.
Et avec le HABTM (méthode 2) tu pourras associé n'importe quel post a un autre post, et donc faire en sorte qu'un post parent peut etre aussi un post enfant d'un autre post etc...
oui , effectivement , je veux que un post parent soit aussi un post enfant d'un autre post , je me suis planté je vais gardé ta methode
<?php
class Post extends AppModel {
public $hasAndBelongsToMany = array(
'AlliasPost1' =>
array(
'className' => 'Post',
'joinTable' => 'posts_posts',
'associationForeignKey' => 'post1_id'
),
'AlliasPost2' =>
array(
'className' => 'Post',
'joinTable' => 'posts_posts',
'associationForeignKey' => 'post2_id'
),
);
}
je viens d'etre encore plus eclaisir avec le tuto de graf sur les taxonomies