nath-0
(Nathalie Chabert)
November 28, 2012, 9:29am
1
Hello,
I have for this exemple 3 table :
personne : personne_id
TarifVente : fk_personne,fk_projet
projet : projet_id
I would like to retrieve projet for one personne.
How can I achieve that ?
Should I use relation ? if yes how? Or should I use Cd Criteria with join ?
Sorry for my approximate english.
Nath
Keith
(Kburton)
November 28, 2012, 9:35am
2
Yep, use a MANY_MANY relation. There’s an example in the first answer here.
konapaz
(Konapaz)
November 28, 2012, 9:56am
3
for example
class User extends CActiveRecord
{
public function relations()
{
return array(
'posts'=>array(self::HAS_MANY, 'Post', 'author_id'),
);
}
}
then you can use
$user=User::model()->with(‘posts’)->findByPk(1);
$posts=$user=>posts;
foreach($posts as $post) {
//your code … post->id;
}
nath-0
(Nathalie Chabert)
November 28, 2012, 10:52am
4
so
'ProjetsActif' => array(self::MANY_MANY, 'TTarifsvente', 't_tarifsvente(fk_personne,fk_projet)','condition'=> 'fk_statut ='.Yii::app()->params->statutsProjet,'order'=>'acronyme'),
$fk_personne = 107;
$Projet = TProjets::model()->with('ProjetsActif')->findAll('ProjetsActif.fk_personne=:personneId',array(':personneId'=>107));
is same as
SELECT DISTINCT p.acronyme, p.projet_id
FROM t_projets p
INNER JOIN t_tarifsvente tv ON p.projet_id = tv.fk_projet
WHERE tv.fk_personne =107
AND p.fk_statut =2
ORDER BY p.acronyme
in fact, that code doesn’t work
nath-0
(Nathalie Chabert)
November 28, 2012, 11:26am
5
yes, it is working now.
In fact, the correct solution is
'ProjetsActif' => array(self::MANY_MANY, 'TTarifsvente',
't_tarifsvente(fk_projet,fk_personne)',
'condition'=> 'fk_statut ='.Yii::app()->params->statutsProjet,
'order'=>'acronyme'),
instead of :
'ProjetsActif' => array(self::MANY_MANY, 'TTarifsvente',
't_tarifsvente(fk_personne,fk_projet)',
'condition'=> 'fk_statut ='.Yii::app()->params->statutsProjet,
'order'=>'acronyme'),
thank you for helping !