データベースを利用したランキングシステムの課題について、映画の興収ランキングをテーマに取り組んでいます。
まずは興収上位5位を並び替え、表示させることを目標にしておりますが、完全に手が止まってしまいました。
【現状】
・データベースに「Id」「Title」「Revenue」「Date」で10データを登録済み
・結果を表示させる前のページは作成できますが、順位を入れ替えた結果を表示させるページがどうしてもエラーとなってしまいます。
現状の作成内容をプッシュしましたので、一度アドバイスを頂けないでしょうか。
特にクエリーの使い方に間違いがないかをご教示いただけると助かります。
1.データベースのテーブル名はrankingとしているので、頭文字は小文字に修正します。
2.$query = $this->ranking->find('all');自体は記載内容は間違っていないように思います。この記載により、[ranking]テーブルのすべてのデータを読み取ってると認識していますが誤解でしょうか?
また、エラー画面の最上段に「Notice (1024): Undefined property: RankingController::$ranking in C:\ts_un_stu_202102\20_ServerProject\htdocs\Rankingsystem\src\Controller\RankingController.php on line 29」
とあるので、「$ranking」という変数が定義されていないとのことですが、そもそも「$ranking」という変数を使用していないので、無視してもよいのでしょうか?
「RankingController」を編集して、ランキング画面が表示されるようになりました。
1についてですが、コントローラー名と同じ名前のテーブルを「$this->テーブル名」と指定することで、データベースを操作できます。
しかし、大文字小文字の基準はコントローラーに準じるので、「Ranking」と大文字を使うのが正しいです。
2については、大文字にすればテーブルの指定になる為、変数として認識される事はないのでエラーは消えます。
また、大文字でも同様のエラーが出るという事ですが、52行目でも小文字の「ranking」が使用されている事が問題だと思うので、そちらも大文字に変更する様にして下さい。
因みに、46,47行目もエラーが出ましたが、今回はコメントアウトで対処させて頂きました。
クエリの使い方で具体的に以下ご教示いただきたく。
テキストでは添付のように[omikuji]テーブルからクエリを取得する場合、
$query = $this->Omikuji->find('all');
と書いておりますが、ここの「$this」「find('all')」の間の「Omikuji」はテーブル名ではなく、コントローラー名が入るのでしょうか?
(「OmikujiController.php」の「Controller.php」を除いた「Omikuji」が入る?)
composerやapp.phpを使ってサーバーとの連動が済んだコントローラでは、
コントローラー名と同じ名前のテーブルを$this->テーブル名
と指定することで、データベースを操作できます。
なので、「Omikuji」はテーブル名となりますが、コントローラー名でも解釈としては合っています。