laravelでmodelを使う練習するときのルーティーン

laravelで「あれ、データをああやって取得するときどうやって書くんだっけ?」って毎回ぐぐりながら開発をすすめていると思って以上に効率悪いのである程度ならしたいとおもってルーティーンを考えました。

そのときの手順などをひとしきり備忘録としてまとめます。

環境の用意

すでにcomposerでapp自体は用意している前提でいきます。

環境

  • xampp3.2.4
  • laravel5.*,6.*,8.*
  • vscode
  • chrome
  • laravel server

アプリ(laravel本体)のダウンロードを書籍(『PHPフレームワーク Laravel入門』『PHPフレームワーク Laravel 実践開発』)や、公式を参考に用意したりしていたらいつのまにか扱っているバージョンが増えていました。

一度にバージョンをまたいで覚えていくようなことはしませんが、参考にしているものと扱っているバージョンが違っていると無駄に詰む確率が高いのでそのときどきに合わせています。

自分のおすすめはDockerファイルをそれぞれのバージョンごとに用意しておいて必要なバージョンをビルドするやりかたですね。

もしくは、laravelのgithubで必要なバージョンを都度落とすのが早い気がします。(こちらならcomposerすらいらない)

サーバーはxamppの設定でてこずって時間がかかるのがつらみなのでlaravelの簡易サーバーを使っています。

DBサーバーだけxamppつかってます。phpmyadminは正義!

ちなみに、macではDocker、windowsではxamppをつかいわけています。(とくにいみはない)

chromeでページをひらいて準備完了

vscodeで[Ctrl + @]でコンソールをひらいて次をたたきます。

php artisan serve

PHP 7.4.13 Development Server (http://127.0.0.1:8000) started

とかえったら、[Ctrl]を押しながらリンクをクリックしてページを開くことができます。

artisan実行

練習用のモデルなどを作成していきます。

テーブルを作る

正確にはマイグレーションファイルを書きます。laravelはマイグレーションファイルで管理できるからはかどりますね!

php artisan make:migration create_customers_table

もちろん公式サイトのチートシートをみながら作成します。

public function up()
{
    Schema::create('customers', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('member_id');
        $table->char('name', 100);
        $table->smallInteger('pref_code');
        $table->text('profile');
        $table->date('last_used');
        $table->integer('point');
        // $table->boolean('is_member');
        $table->timestamps();
    });
}

ほどよく練習用テーブルがかけたらマイグレートします。

php artisan migrate

DBのテーブルを確認します。作成できていたら次に進みます。

ダミーレコードを入れておく

シーダーとファクトリを使います。Seederはレコードを追加する機能、Factoryはダミーレコードを生成する機能と考えればわかりやすいかと思います。

うえで作成した次のテーブルに対して、つぎのように作ってみます。

php artisan make:seeder CustomersTableSeeder
php artisan make:factory CustomerFactory –model=Customer
php artisan make:model Customer

<?php
use Illuminate\Database\Seeder;
use App\Customer;

class CustomersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(Customer::class, 10)->create();
    }
}
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Customer;
use Faker\Generator as Faker;

$factory->define(Customer::class, function (Faker $faker) {
    return [
        'member_id' => $faker->randomNumber(),
        'name' => $faker->name(),
        'pref_code' => $faker->numberBetween(0, 46),
        'profile' => '私はお客様です。そう、私はお客様なのです。猫ではありません、名前もあります。',
        'last_used' => $faker->date(),
        'point' => $faker->randomNumber(),
    ];
});
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class Customer extends Model
{
    //
}

マイグレーションファイルだけをメインブランチに残したかったのに、ダミーレコードをいれることを考えるとそこはしょうがなさそうです。

実行します。

composer dump-autoload
php artisan db:seed –class=CustomersTableSeeder

無事に生成されているか確認します。レコードがはいっていたら次に進みます。

gitで練習ブランチをつくる

メインブランチでマイグレーションファイルなどを作っておいて、練習ブランチでmodelなどをすきなように書いていく流れでやっています。

マイグレーションファイルをメインで作成するのは、DBのテーブルとの整合性を保つためです。テストデータをつっこみたいので、seederやfactoryを用意していたら結局modelも必要になってメインブランチがまあまあふくらみました。

ブランチを切り離した後にメインのほうはmigrationファイル以外消してもいいかもです。

git branchを切り替える

git checkout -b 練習用ブランチ

ブランチを切り替えていざ練習開始です。マイグレーションファイルと一緒にお好みでseederとかfactoryも作っておくとはかどりますね。

Modelを扱う練習タイム

いろいろ試してみます。

練習が終わったら

ブランチをメインに切り替えます。