2012-08-11 73 views
1

我有三个表取了所有收藏了记录

1)tbl_users - > ID,名称

2)tbl_entries - > ID,标题,细节,user_id说明

2)tbl_favorites - > ID ,user_id,entry_id

我只想抓取任何使用Yii的用户的所有喜欢的条目。

我正在使用dataprovider实现它,它提供了条目表的所有记录,但我只想显示那些添加到收藏夹表中的记录。

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

plz help。


我刚拿到MySQL查询为了同样的目的,但要在警予的风格来实现

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

回答

0

来解决,这是通过正确定义您的Models-Relations(&这wiki post也不错)的关键,我不知道你的业务逻辑,但我会假设:

  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