繁体   English   中英

如何将自定义查询转换为CDbCriteria

[英]How to convert custom query to CDbCriteria

我有以下查询:

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`

在两个查询中,在第二个左连接上,我必须传递一个变量$ role_id。 目前,我对一个视图有这个查询但是如果尝试传递一个条件条件,则生成的查询是

select * form menu_links where role_id = $role_id

是menu_links视图的名称。 这不能给我我想要的结果。 我需要一种方法将此参数添加到此查询并将其转换为CDbCriteria,以便将其传递给CGridView。 有帮助吗?

谢谢。

考虑使用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,
    ),
));

我举一个简单的例子,你将弄清楚如何将它应用到你的案例中

$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();

我希望这就是你所要求的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM