Laravelでよく使うコマンド、記法

# 新規プロジェクト作成

```
$ laravel new (アプリ名)
```

または

```
$ composer create-project laravel/laravel (アプリ名) --prefer-dist
```

# artisanコマンド

### コントローラの作成
```
$ php artisan make:controller (コントローラ名)
```

### マイグレーションの作成
```
$ php artisan make:migration create_(テーブル名)_table
```

### モデルの作成
```
$ php artisan make:model (モデル名)
```

### シーダーの作成
```
$ php artisan make:seeder (テーブル名)TableSeeder
```

### マイグレーションとシーダーの反映
```
$ php artisan migrate --seed
```

### データベースのリフレッシュ
```
$ php artisan migrate:reset
```

# web.php記法

### getメソッド

```routes/web.php
Route::get('(相対パス)', function () {
    // 処理
});
```

```routes/web.php
Route::get('(相対パス)', 'コントローラ名@関数')->name('名前');
```

### postメソッド

```routes/web.php
Route::post('(相対パス)', 'コントローラ名@関数')->name('名前');
```

### URLに変数を混ぜる

```routes/web.php
Route::get('/hoge/{id}', 'コントローラ名@関数')->name('名前');
```

```routes/web.php
Route::get('/hoge/{id?}', 'コントローラ名@関数')->name('名前');
```

# マイグレーション記法

```php
Schema::table('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
});
```

### カラムタイプ

| コマンド | 説明 |
|-------|------|
| `$table->bigIncrements('id');` | BIGINT |
| `$table->integer('votes');` | integer(整数) |
| `$table->string('name', 100);` | string(文字列) |
| `$table->float('amount', 8, 2);` | float(実数) |
| `$table->boolean('confirmed');` | boolean(真偽) |
| `$table->date('created_at');` | date(日付) |
| `$table->timestamp('added_on');`| timestamp(時間) |

### カラム修飾子

| コマンド | 説明 |
|-------|------|
| `->unique()` | uniqueキー追加 |
| `->nullable()` | NULL値を許容 |

# モデル記法

### fillable
create()やupdate()を受け付けるホワイトリスト

```php
protected $fillable = [
    'name', 'email', 'password'
];
```

### guarded
create()やupdate()を受け付けないブラックリスト

```php
protected $guarded = [
     'create_at', 'update_at'
];
```

### hidden
パスワードなどの秘匿性の高いカラム

```php
protected $hidden = [
     'password', 'remember_token'
];
```

# シーダー記法

```database/seeds/DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();

        $this->call('Seeder名');

        Model::reguard();
    }
}
```

```php
<?php

use Illuminate\Database\Seeder;

use App\モデル名;

class MemoTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('テーブル名')->delete(); //最初に全件削除

        （モデル名）::create([
            'name' => 'aaa', 'email' => 'aaa@example.com'
        ]);
    }
}
```

# データの取得

### 全件取得

```php
$items = Item::get();
```

### 最初の要素だけ取得

```php
$item = Item::first();
```

### id指定で取得

idというカラムがある場合のみ使用可能

```php
$id = 1;
$item = Item::find($id); // 配列ではなく要素
```

```php
$items = Item::find([1, 3]); // 長さ2の配列
```

### 条件付きでデータを取得

nameというカラムの値が「名前1」というデータを全件取得する。

```php
$items = Item::where('name', '名前1')->get();
```

### AND/OR検索

##### AND検索

15歳の鈴木さんのデータのみ取得する。

```php
$items = Item::where('age', 15)
    ->where('name', '鈴木')
    ->get();
```

```php
$items = Item::where([
    ['age', 15],
    ['name', '鈴木']
])->get();
```

##### OR検索

鈴木さんと山田さんのデータを取得する。

```php
$items = Item::where('name', '鈴木')
    ->orWhere('name', '山田')
    ->get();
```

### 特定の文字列を含んだデータの取得

nameに「川」という文字列を含むデータを全件取得する。

```php
$items = Item::where('name', 'like', '%川%')->get();
```

### 比較によるデータの取得

idが5よりも大きいデータを全件取得する。

```php
$items = Item::where('id', '>', 5)->get();
```

idが5以下のデータを全件取得する。

```php
$items = Item::where('id', '<=', 5)->get();
```

### 時間情報で検索

##### 日付で検索

```php
$items = Item::whereDate('created_at', '2020-01-04')->get();
```

##### 年で検索

```php
$items = Item::whereYear('created_at', '2020')->get();
```

##### 月で検索

```php
$items = Item::whereDate('created_at', '1')->get();
```

##### 日で検索

```php
$items = Item::whereDay('created_at', '4')->get();
```

### 並び替えて取得

##### 昇順 (1, 2, 3, 4)

```php
$items = Item::orderBy('id', 'asc')->get();
```

##### 降順 (4, 3, 2, 1)

```php
$items = Item::orderBy('id', 'desc')->get();
```

### 集約したデータの取得

##### 件数の取得

```php
$count = Item::count();
```

##### 最大値の取得

idが一番大きいデータを取得

```php
$item = Item::max('id');
```

# データの編集や削除

### データの更新

nameを鈴木に変更する

```php
$item = Item::first();
$item->update([
    'name' => '鈴木'
]);
```

### データの追加

25歳の鈴木さんのデータを追加する

```php
Item::create([
    'name' => '鈴木',
    'age' => 25
]);
```

### データの削除

##### 全件削除

```php
Item::get()->delete();
```

##### 特定のデータのみ削除

```php
Item::where('id', 2)->delete();
```

##### id指定で削除

idというカラムがある場合のみ使用可能

```php
$id = 1;
Item::destroy($id);
```

複数削除できる

```php
Item::destroy([1, 3]);
```

# コントローラ記法

```php
class コントローラ名 extends Controller
{
    public function 関数名()
    {
        // 処理
    }
}
```

web.phpでURLに変数を含めた場合、引数としてその変数を受け取ることができる。

```php
class コントローラ名 extends Controller
{
    public function 関数名($変数名)
    {
        // 処理
    }
}
```

### Viewの表示

Viewの名前はresources/views/からのパスを記述する。

```php
return view("Viewの名前");
```

Viewにデータを渡す。

```php
return view("Viewの名前", ['item' => $item]);
```

### リダイレクト

web.phpのnameメソッドで指定した名前を入れる。

```php
return redirect()->route('名前');
```

URLに変数がある場合

```php
return redirect()->route('名前', ['item' => $item]);
```

### formで送信されたデータの処理

`$request->input()`で取得可能

```php
public function 関数名(Request $request)
{
     $name = $request->input('name');
}
```