Laravel日記

# 作ったもの
フォーム入力→確認→データベースに操作
をするwebページ。

composerでプロジェクトを新規作成した後を書く。
今回は各ファイルを用意する部分だけ書く。DB操作までいかない。



# マイグレーション
実行すると.envに記述されているDBにテーブルを作ってくれる。
まずはマイグレーションファイルを作る。

```:ターミナル
php artisan make:migration クラス名
```

コマンドはプロジェクトのディレクトリにでやる。
これでdatabase/migrationsにマイグレーションファイルが作られる。
クラス名は\_で区切って小文字で書くと、アッパーキャメルになって作られる?
(クラス名の例:create\_tests\_table → CreateTestsTable)

できたマイグレーションファイルを見てみる。

```php:2019_06_19_013338_create_tests_table.php
<?php

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

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

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

```

ファイル名は日時\_クラス名になっている。

既にidとタイムスタンプの記述がある。カラムを追加したいときは次のように書く。

```php:2019_06_19_013338_create_tests_table.php
public function up()
    {
        Schema::create('tests', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');   // nameカラムが追加
            $table->timestamps();
        });
    }
```


実行する。

```:ターミナル
php artisan migrate
```
これでテーブルが作られる。

マイグレーションでやったことはこんなところ。




#テストデータ
テーブルを作ったのテストデータを用意しようと思った。
そのままSQL文を書いていこうと思ったが、
調べたらLaravelでテストデータを追加してくれるのがあった。

```:ターミナル
php artisan make:seed クラス名
```

database/seedsにseederファイルが作られる。
run()の中にテストデータを直打ちしていく。

(**php artisan make:seed TestsTableSeeder**とコマンドを打った場合)

```php:TestsTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class TestsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('tests')->insert([
            [
                'id' => 1,
                'name' => 'テスト1',
                'created_at' => date('Y-m-d H:i:s'),
                'updated_at' => date('Y-m-d H:i:s'),
            ],
            [
                'id' => 2,
                'name' => 'テスト2',
                'created_at' => date('Y-m-d H:i:s'),
                'updated_at' => date('Y-m-d H:i:s'),
            ],
            [
                'id' => 3,
                'name' => 'テスト3',
                'created_at' => date('Y-m-d H:i:s'),
                'updated_at' => date('Y-m-d H:i:s'),
            ],
        ]);
    }
}
```

大量のテストデータを作成する方法もあるみたいだけど今回は直打ち。

元からdatabase/seedsディレクトリ内にあるDatabaseSeeder.phpに追記する。

```php:DatabaseSeeder.php
public function run()
{
    // $this->call(UsersTableSeeder::class);
    $this->call(TestsTableSeeder::class);   // ここ追記、作ったクラス名で
}
```

最後、ターミナルでコマンドを打つ。

```:ターミナル
php artisan db:seed
```

これでテストデータが追加されたはず。




# モデル
MVCモデルのMのところ。
作る。

```:ターミナル
php artisan make:model クラス名
```

appディレクトリ内に作られる。

(例:php artisan make:model Test)
↓

```php:Test.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
    // 
}

```

中にバリデーションとかも書けるみたいだけど今回は何も記述せずに進んだ。




# コントローラー
MVCモデルのCのところ。
作ってもらう。

```:ターミナル
php artisan make:controller クラス名
```

app/Http/Controllersに作られる。
クラスの中に関数を用意して、いろいろする。モデル使ったり、ビュー表示したり。

(**test**.blade.phpを表示したい場合)

```php:TestController.php
class TestController extends Controller
{
    public function index() {
        return view('test');
    }
}
```

とりあえずビュー表示するだけ。




# ビュー
MVCモデルのVのところ。
resources/views内に作る。
コマンド作れないか調べたが見つからなかったので普通に作る。
**ビュー名**.blade.phpの形式で。

```php:test.blade.php
<h1>Testだよ</h1>
```

とりあえずこれだけ。




# ルーティング
どのURLでどの処理をするか、書く。
元からroutesディレクトリ内にweb.phpが用意されている。

```php:web.php
Route::get('/', function () {
    return view('welcome');
});
```

なんて呼ぶのか分からない、Homestead.yamlのsites:部分に記述したあれ。ドメイン名？homestead.test？
とりあえず最初から書いてある**これ**は**そこ**にGETでアクセスしたとき行う処理が書いてある。要勉強。

新しい処理を増やす。

```php:web.php
Route::get('/test', 'TestController@index');
```

これで(localでアクセス時のURL)/testにアクセスした時**TestController**の**index**関数が呼び出される。
index関数ないでビューを表示していればビューが出る。





# おわり
今回はこれでおわり。
フォームとかはまた今度書く。

参考にしたサイトはたくさんあるけど、一通り終わってから記事を書いているのと多すぎるのとでここには書きません。申し訳ない。