1

次のクエリがあります。

select 
    `t`.`id` AS `id`,
    `rm`.`role_id` AS `role_id`,
    `t`.`id` AS `sequence`,
    `t`.`parent_id` AS `parent_id`,
    `t`.`label` AS `label`,
    `t`.`order` AS `order`,
    (case
        when isnull(`rm`.`id`) then 0
        else 1
    end) AS `description`,
    `tb`.`label` AS `parent_label`
from
    ((`tbl_menu` `t`
    left join `tbl_menu` `tb` ON ((`t`.`parent_id` = `tb`.`id`)))
    left join `tbl_role_menu` `rm` ON ((`rm`.`menu_id` = `t`.`id`))) and rm.role_id = $role_id
where
    isnull(`tb`.`label`) 
union select 
    `t`.`id` AS `id`,
    `rm`.`role_id` AS `role_id`,
    `t`.`parent_id` AS `parent_id`,
    `t`.`parent_id` AS `sequence`,
    `t`.`label` AS `label`,
    `t`.`order` AS `order`,
    (case
        when isnull(`rm`.`id`) then 0
        else 1
    end) AS `description`,
    `tb`.`label` AS `parent_label`
from
    ((`tbl_menu` `t`
    left join `tbl_menu` `tb` ON ((`t`.`parent_id` = `tb`.`id`)))
    left join `tbl_role_menu` `rm` ON ((`rm`.`menu_id` = `t`.`id`))) and rm.role_id = $role_id
where
    (`tb`.`label` is not null)
order by `sequence` , `parent_id` , `label`

両方のクエリで、左から 2 番目の結合で変数 $role_id を渡す必要があります。現在、ビューにこのクエリがありますが、基準条件を渡そうとすると、結果のクエリは

select * form menu_links where role_id = $role_id

menu_links はビューの名前です。これは私が望む結果を与えません。このパラメーターをこのクエリに追加し、CGridView に渡すために CDbCriteria に変換する方法が必要です。何か助けはありますか?

ありがとう。

4

2 に答える 2

2

CArrayDataProviderの使用を検討してください。

CArrayDataProvider は単純な連想配列のラッパーとして機能し、CGridView は違いを認識しません。ページネーション、並べ替えなどを適用することもできます。これらの機能を紹介する例は、ドキュメントにあります。

$rawData=Yii::app()->db->createCommand('SELECT * FROM tbl_user')->queryAll();

$dataProvider=new CArrayDataProvider($rawData, array(
    'id'=>'user',
    'sort'=>array(
        'attributes'=>array(
             'id', 'username', 'email',
        ),
    ),
    'pagination'=>array(
        'pageSize'=>10,
    ),
));
于 2013-02-04T15:33:22.930 に答える
1

私はあなたにそれをあなたのケースに適用する方法を理解する簡単な例を与えます

$sql= "select * form menu_links where role_id = :role_id";
$role_id='Something you will get from your could';
$command = Yii::app()->db->createCommand($sql);

// And finally the command you can replace the role id with varibale is
$command->bindParam(":role_id", $role_id, PDO::PARAM_STR);

$result = $command->queryAll();

これがあなたの求めていたものであることを願っています。

于 2013-02-01T18:02:39.630 に答える