cakephp中的外部SQL查询

时间:2013-03-25 19:12:25

标签: cakephp

我在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变量数组有什么问题吗?

1 个答案:

答案 0 :(得分:3)

要将变量从控制器传递到View,您需要设置viewVar;

在你的例子中:

$rankings = ..........


$this->set('rankings', $rankings);

第一个参数是要创建/设置的viewVar的名称,例如:

$this->set('FooBar', $rankings);

会创建一个viewVar'FooBar',其中包含通过变量$FooBar

在视图中可用的$ rankings内容

请参阅文档Interacting with Views

中的本章

自定义查询/原始SQL

这不是您问题的一部分,但是,您似乎正在编写自己的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