今回は、このような悩みを持っている方に向けた記事になっています。
Laravelを使用してViewにデータを表示させるのは必須の処理になってきますよね。
だけど、エラーを吐き出してうまく行かないという場合には、気持ちが萎えてしまいます。
恐らく本記事でお伝えする方法を使用していただければ、確実にviewにDBのテーブルデータを表示できるようになると思いますので、試してみていただけると幸いです。
【Laravel】ViewsにDBのテーブルからデータを取得する一連の流れ
viewにDBのテーブルデータを表示させる手順はこちら。
- Modelを作成する
- Controllerにデータベースのテーブル指定処理を書く
- Viewに人のデータを表示する処理を書く
なお、本記事で紹介する方法はコマンドは使用せずにMySQLを使用して、マイグレーションファイル等は使用しない方法になりますので、かなり簡易的に実装できる方法になります。
Modelを作成する
それでは早速、Model部分を作成していきましょう。
Modelで使用するコード
<?php namespace AppModels; use IlluminateSupportFacadesDB; use IlluminateDatabaseEloquentModel; class Sample extends Model { protected $table = 'Sample'; protected $guarded = array('id'); public $timestamps = false; public function getData() { $data = DB::table($this->table)->get(); return $data; } }
Modelで使用する文章は上記のようなコードになります。
ワンブロックずつ解説していきます。
namespace AppModels; use IlluminateSupportFacadesDB; use IlluminateDatabaseEloquentModel;
namespaceはどの部分にこのModelを書いたphpファイルがあるかを指定。
今回は、App直下にModelsというフォルダを作成して、その中にSample.phpというモデルを作成したので『namespace AppModels』となっています。
※namespaceの部分はパスしていをバックスラッシュを指定することになるので、注意しましょう。
『use IlluminateDatabaseEloquentModel;』はモデルを作成した場合に自動的に生成されていると思うので、解説は省きますが、問題はこちらの『use IlluminateSupportFacadesDB;』です。
これは、何かのパスをしていして使っているんだろうなーくらいは理解できますよね。
役割としては、意味合いはSQL文の『select、update、insert、delete、statement』を使用するための文とおぼえておけば大丈夫でしょう。
テーブル内のデータを指定する際になどに使用されるため、ほぼほぼ使用することになると思います。
class Sample extends Model { protected $table = 'sample'; protected $guarded = array('id'); public $timestamps = false; public function getData() { $data = DB::table($this->table)->get(); return $data; } }
それでは、次にModelクラス内の処理について書いていきます。
『class Sample extends Model』の部分はSampleの部分にSample.phpのSampleを記述してモデルのphpファイル名と一致させればOKです。
『protected $table = 'sample'; ~ public $timestamps = false;』までは、最初のprotected $tableで使用したいテーブル名を指定します。
『protected $guarded = array('id'); 』は主キーの指定になりますが、指定のない場合はLaravelの使用上自動的にid指定となるようです。とりあえず、記述しておきます。
『public $timestamps = false;』はタイムスタンプの更新をするかしないかの部分になり、作成日時・更新日時のデータ更新をするかどうかを決めるところになるので、ブログの記事や掲示板なんかを作成する際にはtrueにする必要があるでしょう。
『public function getData() ~』の部分は、$dataにDBファサード(DB::)を使用して指定したテーブルのデータを全取得しています。
最後に『return $data;』で取得したテーブルデータを返しているという感じになっています。
今回こちらの実装をするのに、RitoLaboさんの記事を参考に助けられた部分が多いので、合わせて参考にしていただくと更に知識が深まるでしょう。
Contollerにデータベースのテーブル指定処理を書く
次にコントローラのファイルを作成していきます。
大体ここまでで、Laravelでデータベースのデータを読み込ませるための下準備が完了したといった段階です。
<?php namespace AppHttpControllers; use AppModelsSample; class SampleModelController extends Controller { public function index() { $md = new Sample(); $data = $md->getData(); return view('index',['data' => $data]); } }
前回のModelと同様に解説していきます。
『namespace AppHttpControllers;』はコントローラ作成時に自動生成されると思いますので、割愛させていただきます。
『use AppModelsSample;』はSample.phpがあるディレクトリを指定しなければいけません。
『class SampleModelController extends Controller ~』は、コントローラを作成した際に自動的に生成されると思いますが、今書いているコントローラの名称と同じになっているか確認してみてください。
『public function index() ~』は、変数md($md)にSampleモデルをインスタンス化させるために、new Sample()を記述。
『$data = $md->getData();』で更に変数data($data)に$mdの中にあるgetData関数を使用するという意味を代入します。
『return view('index',['data' => $data]);』では、通常viewを表示するための『return view('index');』に『['data'=>$data]』を追加して、index.blade.phpでSample.phpから取得したテーブルデータを使用するというコードです。
web.phpでルーティングの設定はお忘れなく!
ここまでやっているとルーティングの設定を忘れてしまいそうになるので、念の為。
Route::get('/sample_model/', 'SampleModelController@index()');
通常viewを設定しているControllerと違うコントローラを使用しているので、別でコントローラ指定をしてルーティングを設定することを忘れないようにしましょう。
Viewに任意のデータを表示する
それでは、いよいよ後半戦のviewにテーブルデータを表示させるための方法です。
//上下部関係のないコードのため省略 <div class="col-sm-10"> @foreach ($data as $tdata) <p class="form-control-plaintext">{{ $tdata->name_code}}</p> @endforeach
データベースのテーブルデータを表示させる部分以外のコードは不要なので、必要な部分のみピンポイントで抽出して解説します。
データベースのテーブルデータを挿入したい部分を@foreachディレクティブを使用して囲みます(<? php foreach (key as value)に当たる部分です)。
keyに当たる部分に$dataを記述して、valueの部分は任意の変数でOKです。
そしてデータを挿入したい部分を、『{{ $tdata->name_code}}』と書くことでデータベースの中のSampleテーブルにある、name_codeというカラムのデータが埋め込め完了です。
Sampleテーブルの中のname_codeカラムが複数あった場合は、データがなくなるまで繰り返し処理されるため、<p>タグで一番上のデータから順番に抽出されるようになります。
今回のデータ取得方法は少しイレギュラーかも
今回の状況としては、こちらになります。
- 既にデータベースを作成している
- テーブルデータを作成している
- CUIを使用せず、phpmyadminでMySQLを操作する
- .envファイルでMySQLのアカウントを設定済み
既にある程度下準備のデータが備わっている状況でかつ、CUIを使用しないで実装しているのでphp artisan コマンドは使用せずに作成しています。
本番環境によっては、CUIコマンドを使用できない環境で開発をするレアなケースもあると思い本記事を執筆しました。
ニッチな記事でしたが、あなたが当たっている壁を越えるのお手伝いが出来たら幸いです。