Php 如何将自定义查询转换为CDbCriteria
我有以下疑问:Php 如何将自定义查询转换为CDbCriteria,php,mysql,sql,yii,Php,Mysql,Sql,Yii,我有以下疑问: 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 els
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\u id。当前,我在视图上有此查询,但如果尝试传递条件,则生成的查询是
select * form menu_links where role_id = $role_id
“正在”菜单链接视图的名称。这并没有给我想要的结果。我需要一种方法将此参数添加到此查询并将其转换为CDbCriteria,以便将其传递给CGridView。有什么帮助吗
谢谢。我给你举一个简单的例子,你会发现如何将它应用到你的案例中
$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();
我希望这就是您所要求的。考虑使用
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,
),
));
您是否考虑过使用
CSqlDataProvider
或CArrayDataProvider
?两者都适用于CGridView
@Örs请将此作为答案发布,以便我可以标记它。我最终使用了CArrayDataProvider