気合を入れてデータベースの変更に取り掛かる。
まずはplayersにチーム項目を追加。teamsのテーブルにはチームスタッツを入れていくということでファイナルアンサー。$belongsToなどは使用しない方向に決めました。そしてstatsテーブルを追加しました。
/stats/とURLを入力してアクセス。途中の作業は省きます。とりあえず$scaffoldを入れて確認。
お~、しっかりでとる。(ついでにリン、マット、ジェフを入れておいた)
簡単に説明すると頭の06ってのは05-06シーズンのことです。あとはバスケ知ってる人ならわかるスタッツの名前になっています。avgは平均の数字です。
よし、得点の多い順番に並べてみよう。URLは/stats/avgpts/ってな感じ。ここでは$scaffoldが面倒を見てくれないようなので自前でavgpts.thtmlを用意。/cake/app/views/stats/にぶっこみます。
statsコントローラー
function avgpts() {
$this->set(’stats’, $this->Stat->findAll(null, null, ‘Stat.avg06pt DESC’));
}
avgpts.thtmlを作って適当にタグを埋め込みます。
結果はどうなったかというと・・・
上手く表示できた!!
でも実はこれかなり試行錯誤したんです。DESC(降順)だと上手くいったんですけど、ASC(昇順)だと数字がバラバラに・・・(;;)どうやらデータベースの設定が原因だったようです。MySQLで数字を打ち込んでいるところのフィールドがVARCHARつまり文字列として認識させていたわけですね。これだと桁が同じ時(例:10.02と15.03)は上手く作動してくれるんだけど、桁が違ってくる時(例:10.02と5.21)は順番がバラバラになっちゃう。
そこでググってたら出てきたこちら(MySQLについて 参)を参考にして、打ち込んだ数字を文字列じゃなくて数字列として扱うフィールドに変更しました。合っているのかは不安なんですが、現在は整数のスタッツのところにはINTで、小数点の入るスタッツにはFLOATを入れました。これでDESCした結果が上のキャプ画像になっています。
失敗していたASCもちゃんと表示されました。
モデルの関数で参考にしたのはこちら(CakePHP モデルの関数 findAll「どうにかなるBLOG様」)。例がとてもわかりやすかった(^^ これのおかげで、「何試合以上出ていないと」っていう条件を入れ込むことが出来るようになった。



