我在cakephp中使用此代码进行SQL查询时遇到问题
这里是我在RankingsController.php中的代码
<?php
class RankingsController extends AppController {
public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');
public function index() {
$this->Ranking->virtualFields += array(
'totalpoints' => 0);
$rankings = $this->Ranking->query("
select turnierranks.teilnehmer_id as teilnehmer_id,
teilnehmers.nachname, teilnehmers.vorname,
sum(pointtab.points) as totalpoints
from turnierranks, pointtab, turniers, teilnehmers
where
turnierranks.turnier_id = turniers.id and
turniers.turnierkategorie = pointtab.kategorie and
turnierranks.rank = pointtab.rank and
teilnehmers.id = teilnehmer_id
group by teilnehmer_id, teilnehmers.nachname, teilnehmers.nachname
order by totalpoints desc");
debug($rankings);
}
}
debug(rankings $)显示正确的querydata
但在views / Rankings / index.cpt中我收到错误
未定义的变量:排名[APP / View / Rankings / index.ctp,第12行] 以及下一行的相同错误
LINE 12: <?php debug($rankings); ?>
<?php foreach ($rankings as $ranking): ?>
模型ranking.php中的
<?php
class Ranking extends AppModel {
public $useTable = false;
}
$ rankings变量数组有什么问题吗?
答案 0 :(得分:3)
要将变量从控制器传递到View,您需要设置viewVar
;
在你的例子中:
$rankings = ..........
$this->set('rankings', $rankings);
第一个参数是要创建/设置的viewVar的名称,例如:
$this->set('FooBar', $rankings);
会创建一个viewVar'FooBar',其中包含通过变量$FooBar
这不是您问题的一部分,但是,您似乎正在编写自己的SQL语句来检索数据。这不仅会在您的代码中容许SQL漏洞,还会跳过 CakePHP模型的大部分功能。
使用CakePHP模型“正确”的方式,将减少所需的代码量,并将适当地保护您再次SQL注入等。
请阅读文档中有关模型的章节;
http://book.cakephp.org/2.0/en/models.html#models
http://book.cakephp.org/2.0/en/models/retrieving-your-data.html