【问题标题】:Fetch out all Favorited records取出所有收藏的记录
【发布时间】:2013-02-26 17:29:31
【问题描述】:

我有三张桌子

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

【问题讨论】:

    标签: php yii


    【解决方案1】:

    解决这个问题的关键是正确定义你的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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多