PHP

スポンサー広告

Laravel5.4 MySQLと接続その2

2017/08/02

Laravel5.4 MySQLと接続の続きです。内容的には新たにやり直していきます。

おさらい。

  1. ComposerをインストールしてLaravelを任意(blog)のフォルダにインストールします。
  2. phpmyadmin(コマンドプロンプトでもいい)でDB自体を作成します。
  3. MySQLを使いたいので.envファイル(インストールフォルダ直下)に接続情報を書きます。
  4. php artisan migrate(エラーが出たら /app/Providers/AppServiceProvider.php の修正)
  5. DBにテーブル作成のためphp artisan make:migration create_テーブル名_table --create=テーブル名
  6. 上記でatabase/migrationフォルダに自動作成されるマイグレーションファイルにカラム情報を追記
  7. php artisan migrate

という作業をしてきました。4のエラー処理がなければ7の作業にまとめても大丈夫です。

LarabelはMVCモデルのなんちゃらなので、DBのテーブルからデータを引っ張りだすのにモデルを作成します。

Larabel モデルの作成

Laravelはフレームワークということでいろいろなことを自動でやってくれる機能があり、モデルもコマンドで作成できます。

Laravel 5.4 Eloquent:利用の開始によれば

php artisan make:model テーブル名

のコマンドでモデルが自動作成されるようです。この時のテーブル名は一文字目を大文字にして単数形にするようです。自動的に小文字名の複数形テーブルと紐づくそうです。更に--migrationか-mのオプションを付けて実行するとマイグレーションファイルも自動で生成されるということです。なので上記の5の作業を同時にしてくれるということですね。テーブル作るとおそらくそのテーブルにアクセスするためのモデルは必要になってくるので理にかなってますね。

articleテーブルを新たに作成します。

php artisan make:model Article -m

とします。

modelとマイグレーションファイルの作成

database/migrationsフォルダ内に日付_create_テーブル名_table.phpというファイルが作成されます。

2017_08_01_065247_create_articles_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticlesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('articles');
    }
}

up()の中にカラム情報を追記します。

    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->increments('id');
            $table->char('title', 100);
            $table->text('descript')->nullable();
            $table->integer('category');
            $table->text('comment');
            $table->timestamps();
        });
    }

4つのカラムを追加します。そして先ほどのphp artisan make:model Article -mでモデルが作成されていますので確認します。

インストールフォルダ/Appの下にArticle.phpというファイルが作成されています。

Article.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    //
}

Articleクラスの中は空っぽです。この中にテーブルのカラム名を列挙します。

protected $fillable =['カラム名','カラム名','カラム名'];

$fillableで指定されたカラムは勝手に代入できるカラムということらしいです。オートインクリメントのカラムやらサーバーの時間を記録しておくupdated_atカラムなど勝手に代入されてはいけないカラムは外しておきます。

Article.php変更後

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    protected $fillable =['title','descript','category','comment'];
}

テーブルを作成します。

php artisan migrate

テーブルの作成

うまくテーブルが作成されたようです。phpmyadminで確認してみます。

テーブルが作成されカラムが追加された

テーブルが作成され追加したカラムが作成されています。データは空なのでとりあえずphpmyadminで1件だけ入力しておきます。データの内容は適当です。また別の機会にinsertを行いたいと思います。

データを入力

サーバーにアクセスがあったらroutesフォルダのweb.phpからコントローラーを呼んで、そこからモデルを呼んでviewに返す流れだと思いますが、コントローラーを作らずに仮にテーブルの値をviewに表示してみます。おそらく邪道です。まったく邪道だと思います。

viewファイルを作成します。インストールフォルダ/resources/wiewsの中にarticle.blade.phpを作成します。

article.blade.php

<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Document</title>
    </head>
    <body>
        <table class="table">
            <tr>
                <th>id</th>
                <th>title</th>
                <th>descript</th>
                <th>category</th>
                <th>comment</th>
            </tr>
            <tr>
                <td>{{ $article[0]['id'] }}</td>
                <td>{{ $article[0]['title'] }}</td>
                <td>{{ $article[0]['descript'] }}</td>
                <td>{{ $article[0]['category'] }}</td>
                <td>{{ $article[0]['comment'] }}</td>
        </table>
    </body>
</html>

{{ $article[0]['id'] }}というのが突然出てきますがと同じでしょう。$articleが2次元配列になっています。$articleはweb.phpから渡しますので今のところはそんなもんだと思っておきます。二つ目の添え字がテーブルのカラム名になっています。これでこのテーブルのカラムの値が取得できます。

2回目になりますが、こんな使い方はしないと思いますがweb.phpの中でコントローラーを呼ばずに直接モデルを使います。インストールフォルダ/routes/web.phpにarticleテーブルのモデルファイルのArticleクラスが使えるように

use App\Article;

と記述します。これでweb.phpからモデルファイル内のクラスが使用できます。直接記述されていませんがclass Article extends Modelとなっていますので継承元のModelにいろいろなメソッドがあるはずです。インストールフォルダ\vendor\laravel\framework\src\Illuminate\Database\EloquentのModel.phpにあるはずです。

$article = Article::all();

allメソッドですべてのデータを取得してくれるようです。これをphpのcompact関数(変数名とその値から配列を作成)に渡してあげたものをviewに渡します。

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!
|
*/

use App\Article;    // モデルを呼ぶ

Route::get('/', function () {
    return view('welcome');
});
Route::get('/article', function () {
    $article = Article::all();    // モデル内のクラスのallメソッドですべてのデータ取得
    return view('article',compact('article')); // 配列にしてviewに投げる
});

決してこんな使い方はしないと思いますが、コントローラーをすっ飛ばしてデータベースの値をとってきて表示してみました。 return view('article',第2引数);の第2引数を配列にするとviewに変数を渡すことができます。

DBの値を表示

分かりやすいようにviewファイルにcssを設定しています。

Laravel5.4 MySQLと接続おさらい

  1. テーブル作成はモデルもそのうち作成すると思われるので
    php artisan make:model テーブル名 -m
    でモデルファイル、マイグレーションファイルを一緒に作る(テーブル名は頭大文字単数形)
  2. マイグレーションファイルにはカラム情報を書く
  3. モデルファイルには
    protected $fillable =['カラム名','カラム名','カラム名'];
    の形で書き込んでいいカラムを列挙する
  4. php artisan migrate
  5. とりあえずテーブルに確認用のデータを入力(データ入力方法は別の機会に)
  6. 表示用のviewファイルを作成(投げられてくる変数を記述しておく)
  7. web.phpファイルでモデルファイルを読み込み
    use App\モデル;
  8. モデルクラスのallメソッドで全データ取得
  9. return viewの第二引数にデータを配列形式で書いてviewに投げる
  10. viewファイルにアクセス

ということでした。

やらないといけないことをメチャ飛ばしているようです。次回はコントローラ経由で同じことをする予定です。

rssfeed
コメント
2018年07月02日 02時43分
シャネル財布スーパーコピー さん
ブランド 激安、安心、安全大特価
【新品】バッグ、財布、靴、帽子、アパレル、ベルト、その他小物 シャネル グッチ エルメス ロレックス ROLEX VUITTON
シャネル グッチ エルメス ROLEX S級 シャネル S グッチ S級 エルメス S級 ROLEX
AAA級 VUITTON AAA級 シャネル AAA級 グッチ AAA級 エルメス AAA級品 N級品ルイ ヴィトンS級品
シャネルS級品 グッチS級品 エルメスS級品 ロレックスS級品 ルイ ヴィトンAAA級品 シャネルAAA級品 グッチAAA級品 エルメスAAA級品
■スタイルが多い、品質がよい、価格が低い!
■ 送料無料(日本全国) ご注文を期待しています!
■信用第一、良い品質、低価格は
■当社の商品は絶対の自信が御座います
激安、安心、安全にお届けします.品数豊富な商
商品数も大幅に増え、品質も大自信です
100%品質保証!満足保障!リピーター率100%!

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

お名前
コメント