2012-09-07 3 views
4

J'utilise le framework Yii et j'ai rencontré un problème lors de la construction d'un système de type Friend/Connection. J'ai une table d'utilisateurs standard et de stocker des amis que j'ai une table d'amis avec la disposition suivante (les FKs appropriés etc ont été mis en place):Utiliser AR relationnel pour récupérer la condition "OU"

id | userId | friendId | and some other fields... 

Comme le « ami » est mutuelle - donc, si l'utilisateur A est un ami avec l'utilisateur B, alors l'utilisateur B est un ami avec l'utilisateur A - il n'y a donc qu'une seule entrée par "amitié". Ce que j'essaie de faire est d'utiliser la requête relationnelle de Yii pour éventuellement retourner des objets qui appartiennent à des amis. À l'heure actuelle, j'ai la relation suivante dans le modèle de l'utilisateur ...

'friends' => array(self::HAS_MANY, 'UserFriend', 'userId'), 

Cependant que les amis "ne retourne que si l'ID de l'utilisateur est présent dans le domaine userId. Si l'ID de l'utilisateur se trouve dans le champ friendId, l'amitié ne sera pas reconnue.

Existe-t-il un moyen d'interroger en utilisant "OU" - par exemple: si l'ID de l'utilisateur == userId OU l'ID de l'utilisateur == friendId puis retourner cette entrée?

De plus, existe-t-il un moyen d'obtenir Yii pour renvoyer l'autre ID, donc si l'ID de l'utilisateur == userId il retournera friendId, sinon si ID de l'utilisateur == friendId il retournera userId?

Je suis finalement essayer de faire quelque chose comme:

$userModel = User::model()->findByPk(Yii::app()->user->id); // user's model 
$userFriends = $userModel->with(items)->friends; // return friends with their items 

Espérons que je n'ai pas trop confus! Désolé pour la mauvaise explication

Merci :)

Répondre

0

Suivez les instructions here sur la création d'un objet de commande de base de données, puis vous pouvez interroger avec une condition OR comme suit:

$command->where(array('OR', 'userID = :userID', 'userID = :friendID'), array(':userID' => $userID, ':friendID' => $friendID)); 
+0

je l'avais regardé cette option, est de toute façon à l'intégrer comme une 'relation' pour que je puisse aller '$ user-> friends' puis il a exécuté le DAO? –

+1

La question concerne ActiveRecord, vous répondez dans DAO qui n'est pas lié. – cebe

0

Voulez-vous obtenir tous les amis de l'utilisateur actuel de votre application? Vous pouvez utiliser CDbCriteria et la méthode find(). Quelque chose comme ceci:

$criteria = new CDbCriteria; 
$criteria->addCondition('id = :userid'); 
$criteria->addCondition('friendid = :userid', 'OR'); // OR - the operator to join different conditions. Defaults to 'AND'. 
$criteria->params = array(':userid' => Yii::app()->user->id); 
$userFriends = UserFriend::model()->find($criteria); 

Mais je ne suis pas sûr dans votre structure de modèles User et UserFriend et les relations mutuelles. Avez-vous une relation entre UserFriend et User? Si oui, que vous pouvez utiliser quelque chose comme $userFriends->user0 après le code ci-dessus.

CDbCriteria details

find() method details

Questions connexes