L-3. PDOオブジェクトを使う

PDOオブジェクトって何?

PDO(PHP Data Objects) : データベースアクセスのためのクラス

PHPでは様々なデータベースに接続させるための命令が用意されています。PDOを利用すれば同じ命令で複数のデータベースに接続が可能になるので開発が容易にできるようになります。PDOは、Laravelで使うことができます。

MySQLで利用した命令文を基本として利用します。そのため、複雑なデータ取得方法(JOINバルクインサートなど)は、MySQLで利用した命令文を使用します。

コードの例

まずは、どんなものか確認しておきましょう!

try-catch-finallyの参考サイト

登録する処理の例

データベースの取得

参考

課題

手順を追いながら、ToDoリストを作ろう!

以上のPDOを利用してLaravelでデータを保存表示させてください。
少し長いさぎょうになるため、四つの作業(小課題1-4)に分けて作業していただきます。

  • タスク追加(小課題-1)
  • 未完了タスク表示(小課題-2)
  • タスクのステータス更新、タスク編集(小課題-3)
  • タスクの削除(小課題1-4)

コマンドを実行する(課題の準備)

テーブル準備

データをマイグレートする

テーブルが作成されたことを確認してください。

モデルをつくる

app/Models/Task.phpが作成されていることを確認してください。

コントローラーを作る

CRUD操作を簡単なコードでコントローラーに割りあてる仕組みがあります

app/Http/Controllersに、「TaskController.php」が作成されていることを確認してください。

ルート情報を追記

TaskController.php内の各メソッドが使用できる設定にしました。これらのメソッドを呼び出すURIがあらかじめ決めています。確認のため以下のコマンドを実行してみよう。

php artisan route:list 実行結果

例えば、GET tasks/{task}の意味は、「/tasks/2」でGETアクセスしたら、showメソッドが呼ばれて、IDの2のタスクを表示します。

ビューを作成する (画面の表示)

resources/viewsのフォルダ直下にファイルを作成も可能ですが、ここでは、viewsフォルダ直下に「tasks」フォルダを作成して、その中にindex.blade.phpを作成します。

app/Http/Controllers/TaskController.php にする。[/tasks]にアクセスしたとき、indexを表示する意味。

表示確認

ここで表示を確認してみましょう。

ブラウザを実行すると以下のような表示になりますが、、

Xamppなどローカルで開発すると「Vite manifest not found at」とエラーがでると思います。

実行結果

※「Vite manifest not found at」エラーの対応

エラー解消のために、Node.jsをインストールしてください。

バージョンによりインストールして失敗する場合があります。

その場合、エラーの箇所 @vite(‘resources/css/app.css’) を削除してもかまいません。

Node.jsダウンロード先 (←Google Chromeで開きましょう!)

Larav参考 LaravelでVite manifest not found at が出る原因と対策参考

ターミナルで以下を実行したままにしておく。実行先は、Laravelを実行した同じフォルダで実行してください。

npm run devのコマンドを実行

参考

さらにターミナルを開いて以下を実行してください。

詳細の作成

以下のindex.blade.phpに入力します。

※Laravelでフォームをつくる場合は、セキュリティ対策のCSRF対策として、必ず「@csrf」というディレクティブが必要だそうです。

小課題ー1

タスクをMysqlテーブルに登録する

上記の内容記載して、ブラウザ画面のテキストボックスに文字をいれて

受け取れていることを確認してください。

Eloquentのクエリスコープについて

データベースのレコード処理を簡素化するオブジェクト関係マッピング(ORM)で、データベースのレコードをまるでPHPのオブジェクトのように扱える仕組みです。

Userというクラスにアクセスして、1番のユーザーを取得場合、以下のように表します。

テーブルに登録

以下のように書き換えてください。

小課題-2

上記の内容を記載して、ブラウザ画面のテキストボックスに文字をいれて

MySQLデータに保存されているか確認してみてください。

バリデーションチェックしておく

resources/views/tasks/index.blade.phpの箇所で、

labelの中にあるinputタグの下に以下を追記してください。

表示されるか確認してください。何も入力しないで追加ボタンを押してください。

タスクリストの表示

詳細の作成の中に記載した

を以下の内容を追記してください。

それぞれ何をしているかを理解しておきましょう。

var_dump(関数値); dd($tasks);を使って何が表示されているかを確認しましょう。

タスクの編集

1行のタスクを編集する場合の処理

resources/views/tasks/edit.blade.phpを作成して以下のように追記します。

更新

タスクを完了させる

完了ボタンでを設置しているformタグの中身が以下になります。

小課題-3

完了したとき、データベースでstatusが1になっていることを確認しましょう!
なぜstatusが1になるかはこちら

完了は非表示にする

タスクの削除

タスクの削除をするボタンの部分に以下を修正します。

Javascriptを使って削除する前に、警告表示をつけます。

</footer>下に設置しました。

小課題-4

削除処理をdestroy関数にいれてください。

ヒント:Task::find(値)->delete(); で削除され、return 戻すようにしてください。

   

小課題1から4すべて完了したら、動作を確認して、GitHubにプッシュしてプルリクエストを投げてください。

ヒント

文字、行の量が多いため、追記部分に漏れがありエラーが起きる可能性があります。漏れがないかしっかりチェックすること。
MVCパターンをしっかり理解して、役割を分けること。

参考

課題・復習用検索キーワード

検索例
🔍php PDO Laravel
🔍php Laravel MVCパターン
🔍Mysql 命令文
🔍Laravel Todoアプリ機能一覧