4

我正在使用 Yii 框架,并且在构建朋友/连接样式系统时遇到了一个问题。我有一个标准的用户表并存储朋友我有一个具有以下布局的朋友表(已设置适当的 FK 等):

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

由于“朋友”是相互的——因此,如果用户 A 是用户 B 的朋友,则用户 B 是用户 A 的朋友——因此每个“友谊”只有一个条目。

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

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

但是,如果用户 ID 存在于 userId 字段中,则仅返回“朋友”。如果用户的 ID 在friendId 字段中,则无法识别“友谊”。

有没有办法使用“或”进行查询 - 例如:如果用户 ID == userId OR 用户 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

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

谢谢 :)

4

2 回答 2

0

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

$command->where(array('OR', 'userID = :userID', 'userID = :friendID'), array(':userID' => $userID, ':friendID' => $friendID));
于 2012-09-07T21:58:52.430 回答
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);

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

CDbCriteria 详细信息

find() 方法详细信息

于 2013-01-20T06:03:34.770 回答