Système de tag général

Par lakamark, il y a 11 ans


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.

7 réponses

Grafikart, il y a 11 ans

Il faut que tu déclare les hasMany dans le model Tag

lakamark, il y a 11 ans

À la façon classique?

public $hasMany = array('Post','Track');
lakamark, il y a 11 ans

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.

Grafikart, il y a 11 ans

Je ne pense pas que ça soit possible tu va être un peu bloqué là :(

lakamark, il y a 11 ans

J'ai pas le choix de faire cette configuration manuel?

lakamark, il y a 11 ans

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.

lakamark, il y a 11 ans

Comment je peut faire pour régler ce conflit entre mes models?