我正在使用Yii框架,并在构建朋友/连接样式系统时遇到了一个问题。我有一个标准的用户表和存储朋友我有一个朋友表,其中包含以下布局(已经设置了相应的FK等):
id | userId | friendId | and some other fields...
由于“朋友”是相互的 - 所以如果用户A是用户B的朋友,那么用户B是用户A的朋友 - 因此每个“友谊”只有一个条目。
我要做的是使用Yii的关系查询最终返回属于朋友的项目。目前我在用户模型中有以下关系...
'friends' => array(self::HAS_MANY, 'UserFriend', 'userId'),
但是,如果userId字段中存在用户ID,则仅返回“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
希望我没有太多困惑!对不起的解释很抱歉
谢谢:)
答案 0 :(得分:0)
按照here的说明创建数据库命令对象,然后您可以使用OR
条件进行查询,如下所示:
$command->where(array('OR', 'userID = :userID', 'userID = :friendID'), array(':userID' => $userID, ':friendID' => $friendID));
答案 1 :(得分:0)
您想要获取您应用的当前用户的所有朋友吗? 您可以使用CDbCriteria和方法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);
但我不确定你的User
和UserFriend
模型结构和相互关系。你有UserFriend
到User
的关系吗?如果是这样,那么您可以在上面的代码之后使用$userFriends->user0
之类的内容。