0

SQLクエリのcakephpのこのコードに問題があります

ここに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 $)は正しいクエリデータを表示します

しかし、views / Ranks/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変数配列の何が問題になっていますか?

4

1 に答える 1

3

コントローラからビューに変数を渡すには、viewVar;を設定する必要があります。

あなたの例では:

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


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

最初のパラメーターは、作成/設定するviewVarの名前です。次に例を示します。

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

変数を介してビュー内で利用できる$rankingsのコンテンツを含むviewVar'FooBar'を作成します$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/retrieveing-your-data.html

于 2013-03-25T19:50:17.723 に答える