1

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

製品モデルにこの関係を追加します

return array( 'categories' => array(self::MANY_MANY, 'Category', 'product_category(product_id, category_id)') );

カテゴリを選択する場合は、カテゴリによる検索を使用したいと思います。

製品でactionIndexは、このコードを追加します

$criteria=new CDbCriteria;
if($_GET['name'])
{
    $criteria->with = array('categories');
    $criteria->together = true;
    $criteria->addCondition('categories.name = :name');
    $criteria->params = array(':name'=>$_GET['name']);
}

$dataProvider=new CActiveDataProvider('Product',array(
        'pagination'=>array(
                'pageSize'=>10,
        ),
        'criteria' => $criteria
));

$this->render('index',array(
    'dataProvider'=>$dataProvider,
));

検索を行った場合、カテゴリは熱心な読み込みで読み込まれ、検索以外のカテゴリはありません。Andrey Vorobyev が言うように
、製品をカテゴリ別に検索しますが、 2 番目のリレーションによってそれらをロードせずにすべてのカテゴリが表示されます。$data->categories

下手な英語でごめんなさい

4

2 に答える 2

1

答えを見つけた

を使用する$criteria->with = array('categories'=>array('select' => false)) and call $data->categoriesと、遅延読み込みが行われ、すべて問題ありません。

于 2013-07-27T12:50:21.680 に答える
0

まず、名前の異なる 2 つの同じリレーションを作成します。1 つは検索用、もう 1 つは表示用です。
条件を設定すると、投稿をカテゴリでフィルタリングするため、すべてのカテゴリを取得することはできません。しかし、もう 1 つリレーションがあります。印刷投稿の場合、すべてのカテゴリを遅延読み込みで取得できます。

于 2013-07-27T10:00:34.893 に答える