Yii - 使用关系的CActiveDataProvider

GST*_*TAR 3 php activerecord yii

我试图使用关系作为创建标准的一部分CActiveDataProvider.我有以下内容:

用户模型:

return array(
        'favourites'=>array(self::HAS_MANY, 'UserFavourite', 'user_id', 'order'=>'added_at DESC'),
);
Run Code Online (Sandbox Code Playgroud)

UserFavourite模型:

return array(
        'user'=>array(self::BELONGS_TO, 'User', 'user_id'),
        'listing'=>array(self::BELONGS_TO, 'Listing', 'listing_id'),
);
Run Code Online (Sandbox Code Playgroud)

控制器(查看收藏夹操作):

$user = $this->loadUser(Yii::app()->user->id);
Run Code Online (Sandbox Code Playgroud)

如何CActiveDataProvider在我的用户模型中创建一个favourites由当前用户提取所有内容的模型- 以及listing每个收藏夹的相关模型数据?所以我想做点什么$favourites = $user->getFavourites();.

CActiveDataProvider应返回数组Listing对象.它应该支持分页和排序 - 默认排序added_at DESC.

我试过使用with选项,CDbCriteria但似乎不起作用......

anw*_*erj 8

您还没有提供数据库架构,但我想这段代码可以工作,

$criteria=new CDbCriteria();
$criteria->with=array('favourites'=>array('with'=>'listing'));
$dataProvider= new CActiveDataProvider('User', array(
        'criteria'=>$criteria,
        'sort'=>array(
            'defaultOrder'=>'t.added_at DESC',
        )));
Run Code Online (Sandbox Code Playgroud)

请确保您的关系正确且符合架构.

  • 事实上,如果你不关心查询的数量,你可以随时调用类似的东西

    $用户>收藏夹;

它将返回正确关系的正确数据,您可以再次执行此操作

为了通过列表模型来查看这样的

foreach($user->favourites as $fav){

  $this->renderPartial("PATH TO YOUR VIEW",array('data'=>$fav->listing));

}
Run Code Online (Sandbox Code Playgroud)

请注意,用户可能有许多收藏夹,因此您需要使用foreach,除非您不使用CListview.另一种方法是用户Clistview,在这种情况下,您可能需要更改您的查询.让我知道这对您有用.