1

我有三张桌子

1) tbl_users -> id,名称

2) tbl_entries -> id、title、details、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

解决这个问题的关键是正确定义你的模型-关系(&这个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 回答