使用关系AR来检索“;OR”;条件


Using relational AR to retrieve "OR" condition

我正在使用Yii框架,在构建Friend/Connection风格的系统时遇到了一个问题。我有一个标准的用户表,为了存储朋友,我有一张具有以下布局的朋友表(已经设置了适当的FK等):

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

由于"朋友"是相互的——因此,如果用户A与用户B是朋友,那么用户B与用户A是朋友——因此每个"友谊"只有一个条目。

我想做的是使用Yii的关系查询来最终返回属于朋友的项目。目前,我在用户模型中有以下关系。。。

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

但是,只有当用户ID出现在userId字段中时,它才会返回"friends"。如果用户的ID在friendId字段中,则"友谊"将不会被识别。

有没有一种方法可以使用"OR"进行查询——例如:如果用户的ID==userId或用户的ID===friendId,那么返回该条目?

此外,有没有办法让Yii返回另一个ID,所以如果用户的ID==userId,它会返回friendId,否则如果用户的ID==friendId会返回userId?

我最终尝试做一些类似的事情:

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

希望我没有混淆太多!抱歉解释不周

感谢:)

按照此处的说明创建数据库命令对象,然后可以使用OR条件进行查询,如下所示:

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

是否要获取应用程序当前用户的所有好友?您可以使用CDbWriter和方法find()。类似这样的东西:

$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);

但我不确定你的UserUserFriend模型的结构和相互关系。你和UserFriendUser有什么关系吗?如果是这样的话,那么您可以在上面的代码之后使用类似$userFriends->user0的东西。

CDb标准详细信息

find()方法详细信息