1

私は3つのテーブルを持っています

1) tbl_users -> ID、名前

2) tbl_entries -> id、タイトル、詳細、user_id

2) tbl_favorites -> id、user_id、entry_id

Yii を使用しているすべてのユーザーのお気に入りのエントリをすべて取得したいだけです。

私はそれを達成するためにdataproviderを使用しています.Entriesテーブルのすべてのレコードを提供しますが、お気に入りテーブルに追加されたレコードのみを表示したい.

$dataProvider = new CActiveDataProvider('Entries', array(
    'criteria' => $criteria,
    'pagination' => array(
        'pageSize' => 15,
    ),
    ));

助けてください。


同じ目的で mysql クエリを取得しましたが、yii スタイルで実装したいと考えています。

SELECT * FROM tbl_entries, tbl_favorites  where tbl_entries.id = tbl_favorites.entry_id and tbl_favorites.user_id = xx
4

1 に答える 1

0

これを解決するための鍵は、 Models-Relationsを正しく定義することです(そしてこのwikiの投稿も良いです)。あなたのビジネスロジックはわかりませんが、次のように想定します。

  1. ユーザー has-many エントリ
  2. ユーザー has-many のお気に入り
  3. エントリー belongs-to ユーザー
  4. エントリー has-one お気に入り
  5. お気に入り belongs-to のエントリ
  6. お気に入りの belongs-to ユーザー

ヒント:後で意味をなすようにリレーションに名前を付けます。たとえば、#1はエントリで、#3はエントリである必要があります。

したがって、次のことを行うuser_id必要があります。

  1. ユーザーレコードを取得する
  2. ユーザーのお気に入りを取得する
  3. (2)のすべての結果について、対応するエントリをフェッチします

コードは次のようになります。

$user = User::model()->findByPk($user_id); //Fetch user record
$favorites = $user->favorites; // Fetch the user favorites using relations #2 & #6

// Getting entries
$entries = array(); // empty array to store entries

foreach($favorites as $fav) do
{
  $entries[] = $fav->entry; // Fetch entry record using relations #4 & #5
}
....
// Pass $entries array to your view 
于 2012-08-11T12:51:51.427 に答える