0

I have trouble with this code in cakephp for a sql query

Here my code in 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$) show the right querydata

but in views/Rankings/index.cpt i get the error

Undefined variable: rankings [APP/View/Rankings/index.ctp, line 12] and the same error for the next line

 LINE 12: <?php   debug($rankings); ?>


<?php foreach ($rankings as $ranking): ?>

in Model ranking.php

<?php
class Ranking extends AppModel {
 public $useTable = false; 
}

whats is wrong with the $rankings variable array?

4

1 回答 1

3

要将变量从控制器传递到视图,您需要设置一个viewVar;

在您的示例中:

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


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

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

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

将创建一个 viewVar 'FooBar' 包含 $rankings 的内容,这些内容将通过变量在您的视图中可用$FooBar

请参阅文档交互视图中的这一章

自定义查询/原始 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

于 2013-03-25T19:50:17.723 回答