山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

Laravel From Scratch part. 1

Laravel

laracasts.com

Laravelの本にちょっと飽きたので、動画サイトで学習します。

コード補完

Laravelを使い始めた人にはわかると思いますが、VSCodeでLaravelの補完が効かずに、エラーを出すので調べて見たところVSCodeプラグインが原因でした。Laravelに対応していないみたいです。

[Laravel] IDEによるコード補完まとめ - Qiita

この記事の通りにやると僕の環境ではエラーが出たので、

composer require --dev barryvdh/laravel-ide-helper:2.*
php artisan ide-helper:generate

とするとちゃんと動きました。

Chapter 3 Database Access: Setup a Database Connection

このチャプターでデータベースを使っていくんですが、僕の環境はWindowsなので、XAMPPを起動してphpMyAdminを使いました。

DB

LaravelではDBのパスワードなどは.envファイルにあるので、意識することなくDBを使うことができます。

class PostsController extends Controller
{
    public function show($slug)
    {
        // 1件取得する
        $post = \DB::table('posts')->where('slug', $slug)->first();

        return view('post', [
            'post' => $post
        ]);
    }
}

SQLチックに書くことができます。こういう文をあまり書いたことがないので、覚えていきたいですね。

\DB

を外したければ、

use DB;
DB

と書くことができる。

Chapter 3 Database Access: Migrations 101

phpmyadminでpostsテーブルを削除します。

次に、マイグレーションのためのファイルを作ります。

php artisan make:migration create_posts_table

実行して

<?php

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

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('slug');
            $table->text('body');
            $table->timestamps();
            $table->timestamp('published_at')->nullable();
        });
    }

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

を作り、

php artisan migrate

を実行しましたが、

Illuminate\Database\QueryException  : could not find driver (SQL: select * from information_schema.tables 
where table_schema = laravel6 and table_name = migrations and table_type = 'BASE TABLE')

というエラーが出ました。調べて見ると、php.iniが問題みたいですね。

laravelでpowershellからmigrateしようとしたらcould not find driverが出る - Qiita

この記事の通り、xamppのシェルから実行するとうまくいきました。PHPの公式サイトからインストールしたPHPとXAMPPに入っているPHPの環境があるので、問題だったようです。

実行しphpmyadminで確認するとpostsテーブルが確認できます。

ここで新しくpostsテーブルにカラムを追加します。

class AddTitleToPostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->string('title');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->dropColumn('title');
        });
    }
}

これを実行した後に、

php artisan migrate:rollback

を行うと、'title'カラムが削除されます。

Laravelのmigrate:rollbackについて - Qiita

最後にmigrateを行う前の状態に戻るということみたいです。

Chapter 3 Database Access: Business Logic

php artisan make:model Assignment -mc

-mc を付けることでマイグレーションファイルとコントローラーとモデルを同時に作成します。

php artisan tinker

を実行してLaravel対話的にLaravelを使うことができます。

PHPフレームワーク Laravel入門 第2版

PHPフレームワーク Laravel入門 第2版