PHP

スポンサー広告

Laravel5.4 MySQLと接続その3

2017/08/06

Laravel5.4 MySQLと接続その2の続きです。

おさらい(手順)

  1. php artisan make:model テーブル名(頭大文字単数形) -m でマイグレーションファイルとModelのPHPファイルを作成
  2. マイグレーションファイルを編集してテーブルのカラムを定義
  3. php artisan migrateでテーブル作成
  4. インストールフォルダ/Appの下のモデルファイルに protected $fillable =['カラム名','カラム名','カラム名'];を追記(編集していいカラム名)
  5. 手動でテーブルデーターを入力
  6. viewを作る。下の12の変数名を埋め込む
  7. web.phpでModelフィルをuseして変数=モデル内クラス::all();
  8. return view('article',compact('変数名'));

とわかったようなわからない手順でした。

controlerからモデルにアクセスしてデータをviewに渡す

今回は上記7の手順をコントローラーにしてもらいます。

artisanを使います。

php artisan make:controller コントローラー名

コントローラー名はFooControllerのようなパスカル記法(単語の頭が大文字)がお作法のようです。

MySQLのArticleテーブルに対するコントローラーを作成しようと思います。インストールフォルダに移動して

php artisan make:controller ArticleController

コントローラーの作成

これでインストールフォルダ/app/Http/Controllerの中にArticleController.phpが作成されました。

ArticleController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ArticleController extends Controller
{
    //
}

クラスの内容が空のファイルが作成されました。このクラス内に処理を書きます。

クライアントからサイトにアクセスがあるとweb.phpでviewを指定するのですがその時にcontroller(のメソッド)の指示でDBからデータを取得したり、登録したり、処理の結果をviewに渡すようにします。ですから今回はmodelからデータを引っ張ってきてすべてのデータを渡します。

modelは手順4(Laravel5.4 MySQLと接続その2)でできていますすべてのデータはmodelを呼んでテーブル名::all();で取得できます。今回はArticleController.phpにindexクラスを作りその中で$article = Article::all();をしてviewに返してあげます。

ArticleController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Article;        // モデルを呼ぶのに必要

class ArticleController extends Controller
{
     public function index(){
	    $article = Article::all();
	    return view('article', compact('article'));
	 }
}

これでコントローラーからモデルを呼んですべてのデータを取得して$articleでそのデータを渡してあげられます。$articleは配列になるので複数形の$articlesの方がよかったですが、前回単数形でviewも作ってしまったので気にせず行きます。

あとはweb.phpでコントローラを呼ぶようにしてあげれば完成です。

前回のRouteが残っている場合は消します。

web.php

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});
Route::get('/article','ArticleController@index');  // articleにアクセスがあったらArticleControllerのindexメソッドを実行せよ

それで、上記のコントローラーのメソッドが呼ばれてモデルからデータを取得。articleという配列をviewのarticleにreturnしてね。

viewのarticleはLaravel5.4 MySQLと接続その2の時と同じです。

簡単ではありますが、laravel5.4でのMVCモデルを実行してみました。

rssfeed
コメント

コメントよろしくお願いします。

お名前
コメント