Un simple relation qui ne veut pas....

Bonsoir,

là je bloque pour me faire une petite relation. Je m’explique:

J’ai une table categorie et une table produit.

Une catégorie peut être associée a un produit via la clé étrangère id_categorie présente dans la table produit.

Jusque là rien de plus classique.

Dans le modèle Produit j’ai donc la relation

[PHP]‘categorie’ => array(self::BELONGS_TO, ‘Categorie’, ‘id_categorie’),[/PHP]

Maintenant, j’aimerai avoir tous les produits présents dans cette catégorie!

J’ai bien essayé une relation avec through du genre


'produitsFreres' => array(self::HAS_MANY, 'Produit', array('id' => 'id_categorie'), 'through' => 'categorie'),

Mais j’ai une erreur SQL, la requête étant:


SELECT `produitsFreres`.`id` AS ,... FROM `produit` `produitsFreres` 

LEFT OUTER JOIN `categorie` `categorie` ON (`categorie`.`id`=`produitsFreres`.`id_categorie`) 

WHERE (`categorie`.`id_categorie`=:ypl0) 

Et l’erreur:


Column not found: 1054 Unknown column 'categorie.id_categorie' in 'where clause'

Comment faire pour récupérer tous les produits présents dans la même catégorie via une simple relation?

Merci pour votre aide!

Bonne soirée,

Clem

Bonsoir

Avez-vous essayé comme suit :

  • Votre relation ‘categorie’

  • Une relation ‘produits’ (HAS_MANY) classique dans le modèle Categorie

  • Pour récupérer les produits frères du produit dont l’id = $id par exemple :


Produit::model()->findByPk($id)->categorie->produits

?

Effectivement, c’est ce que j’ai fini par faire, et ça fonctionne très bien… mais j’aurai aimé être capable de le faire avec une relation dans le modèle Produit!

Mais depuis quand il faut une relation pour une simple requete du genre :


SELECT * FROM `produit` WHERE `category_id`=1

ce qui revient au même que :


$id=1;

Produit::model()->findByPk($id);

Pour comprendre comment faire une relation plus complexe, sans utiliser de fonction, une façon plus poussée d’utiliser le framework.

D’ailleurs dans ton exemple ci-dessus


SELECT * FROM `produit` WHERE `category_id`=1

Ne revient pas du tout au même que


$id=1;

Produit::model()->findByPk($id);

Mais plutôt


$id=1;

  $criteria=new CDbCriteria;

  $criteria->addCondition('t.id_categorie=:idCategorie');

  $criteria->params[':idCategorie']= $id;

  Produit::model()->findAll($criteria);

ouais je sais mais j’avais pas envie d’aller chercher le code dans les entrailles de mon site :lol:

…ou bien aussi :




Produit::model()->findAllByAttributes(array( 'id_categorie' => $id));



B)