我正在尝试将以下查询转换为数据提供者,因此可以在CGridView中显示。我尝试过使用CArrayDataProvider,但到目前为止还没有任何运气,任何帮助都将不胜感激!
这是查询
public function getTeamsByLevelIdAndCompetitionId($levelId, $competitionId)
{
$query = "SELECT t.*,
(SELECT COUNT(*)
FROM tbl_competition_teams ct
WHERE ct.team = t.id
AND ct.competition = :competitionId) AS 'inCompetition'
FROM tbl_teams t
WHERE t.level = :levelId";
$params = array(
'levelId' => $levelId,
'competitionId' => $competitionId
);
$result = array();
$teams = $this->findAllBySQL($query, $params);
return $teams;
}
这就是我尝试进入CArrayDataProvider的方式:
public function getTeamsByLevelIdAndCompetitionId($levelId, $competitionId)
{
$rawData = Yii::app()->db->createCommand("SELECT t.*,
(SELECT COUNT(*)
FROM tbl_competition_teams ct
WHERE ct.team = t.id
AND ct.competition = :competitionId) AS 'inCompetition'
FROM tbl_teams t
WHERE t.level = :levelId")->queryAll();
$params = array(
'levelId' => $levelId,
'competitionId' => $competitionId
);
return new CArrayDataProvider($rawData, array(
'id'=>'id',
'sort'=>array(
'attributes'=>array(
'id', 'title', 'club', 'level', 'inCompetition',
),
),
)); }
但是这给了我错误“CDbCommand无法执行SQL语句:SQLSTATE [HY093]:参数号无效:没有参数被绑定。”
这是我的团队表
CREATE TABLE `tbl_teams` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(35) NOT NULL DEFAULT '',
`level` int(10) unsigned DEFAULT NULL,
`club` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2952 ;
和我的竞赛团队表
CREATE TABLE `tbl_competition_teams` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`competition` int(10) unsigned NOT NULL DEFAULT '0',
`team` int(10) unsigned NOT NULL DEFAULT '0',
`seasonId` int(11) NOT NULL DEFAULT '3',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=126320 ;
提前感谢一百万人提出建议!
答案 0 :(得分:4)
也许问题是你queryAll()执行查询。此时您不会将值分配给参数
$rawData = Yii::app()->db->createCommand("SELECT t.*,
(SELECT COUNT(*)
FROM tbl_competition_teams ct
WHERE ct.team = t.id
AND ct.competition = $competitionId) AS 'inCompetition'
FROM tbl_teams t
WHERE t.level = $levelId")->queryAll();
您也可以尝试重写您的查询。
$query = "SELECT t.*,
(SELECT COUNT(*)
FROM tbl_competition_teams ct
WHERE ct.team = t.id
AND ct.competition = :competitionId) AS 'inCompetition'
FROM tbl_teams t
WHERE t.level = :levelId";
$command= Yii::app()->db->createCommand($query);
$command->bindValue(':levelId', $levelId);
$command->bindValue(':competitionId', $competitionId);
$rawData = $command->queryAll();