Bonjour
Je me suis faite un systène de tags général pour tout le site web. Ma table Tags as les champ suivant :
id
ref_id : L'id de l'enregistrement d'un post, d'une tune, ou d'un utilsateur
ref : le nom du modèle
created
Je me suis fait un behavior Tag pour que ce comportement soi accessible à tout mes modèle.
Je veux éxécuter cette requête :
$tag = $this->Tag->find('first',array(
'conditions' => array('Tag.slug' => $slug),
'contain' => array('Post','Track','User')
));
Quand je fait un debug de ma variable : $tag
ça me retourne ce-ci :
array(
'Tag' => array(
'id' => '1',
'name' => 'I'm a tag!!!!!!',
'slug' => 'i-m-a-tag',
'ref' => 'post',
'ref_id' => '5',
'created' => null,
'link' => array(
'controller' => 'tags',
'action' => 'show',
'slug' => 'i-m-a-tag'
)
),
// tout les post qui ont ce tag
// tout les tune qui ont ce tag
etc.
Voci le code source de mon behavior :
public function setup(Model $model,$config = array()) {
$model->tags = array_merge($config);
$model->hasMany['Tag'] = array(
'className' => 'Tag',
'foreignKey' => 'ref_id',
'conditions' => 'ref = "'.$model->name.'"',
'dependent' => true
);
}
Merci de votre aide.
Ok ça fonctionne, mais je trouve que je me répète beaucoup :
public $hasMany = array(
'Post' =>array(
'foreignKey' => 'id'
),
'Track' => array(
'foreignKey' => 'id'
),
'User' => array(
'foreignKey' => 'id'
)
);
alors est-ce que c'es possible d'automatiser grâce au behavior.
J'ai un autre problème j'ai des conflits entre mes models. Le modèle Tags récupère mal les données :
'Tag' => array(
'id' => '2',
'name' => 'dd',
'slug' => 'dd',
'ref' => 'Post',
'ref_id' => '1',
'created' => '2015-02-22 22:13:52',
'link' => array(
'controller' => 'tags',
'action' => 'show',
'slug' => 'dd'
)
),
'Post' => array(
(int) 0 => array(
'id' => '2',
'name' => 'Deuxime',
'type' => 'Post',
'slug' => 'dexieme',
'content' => '<p>teste</p>',
'created' => '2015-01-06 20:34:21',
'user_id' => '1',
'category_id' => '2',
'link' => array(
'controller' => 'posts',
'action' => 'show',
'slug' => 'dexieme'
)
)
),
'Track' => array(),
'User' => array(
(int) 0 => array(
'password' => '*****',
'id' => '2',
'username' => 'Teste1',
'slug' => 'teste1',
'mail' => 'exemple@exemple.com',
'firstname' => null,
'lastname' => null,
'bio' => null,
'thumb' => null,
'language' => null,
'active' => '1',
'token' => '',
'created' => '2015-01-12 15:59:37',
'role' => 'member',
'end_subscription' => null,
'soundcloud_id' => '0',
'facebook_id' => '0'
)
)
Ce tag est à le référent : Post et L'id 1. Techniquement ma table Track et Users devrais être vide.