4

私は Yii フレームワークを使用していますが、Friend/Connection スタイルのシステムを構築しているときに問題に遭遇しました。標準のユーザー テーブルがあり、フレンドを保存するために、次のレイアウトのフレンド テーブルがあります (適切な FK などが設定されています)。

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

「友達」は相互的なものであるため、ユーザー A がユーザー B と友達である場合、ユーザー B はユーザー A と友達です。したがって、「友達関係」ごとに 1 つのエントリしかありません。

私がやろうとしているのは、Yii のリレーショナル クエリを使用して、最終的に友人に属するアイテムを返すことです。現在、 User モデルに次の関係があります...

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

ただし、ユーザーの ID が userId フィールドに存在する場合にのみ、「友達」が返されます。ユーザーの ID が friendId フィールドにある場合、「友情」は認識されません。

「OR」を使用してクエリを実行する方法はありますか? たとえば、ユーザー 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

アプリの現在のユーザーのすべての友達を取得しますか? 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その場合は、上記のコードの後に​​次のようなものを使用できます。

CDb基準の詳細

find() メソッドの詳細

于 2013-01-20T06:03:34.770 に答える
0

データベース コマンド オブジェクトの作成に関するこちらの手順に従ってください。その後OR、次のように条件を使用してクエリを実行できます。

$command->where(array('OR', 'userID = :userID', 'userID = :friendID'), array(':userID' => $userID, ':friendID' => $friendID));
于 2012-09-07T21:58:52.430 に答える