【laravel】CRUD構築

###趣旨

laravelでのCRUD構築を忘備録を兼ねて書きたいと思います。
※環境構築は今回飛ばします。（vagrantかdockerあたりでご準備ください）

###バージョン

laravel 5.7
PHP 7

###ファイル構成
主要なファイルは以下の通りです。
（今回は「blog」をルートファイルにしています）

```:ファイル構成
blog
-app/ #console,Exceptions,Http,provider等主要な処理クラスがディレクトリの配下に存在
-artisan/
-bootstrap/ #アプリケーションで最初に実行される処理やオートローディング設定 -composer.json/
-composer.lock
-config/ #アプリケーションの設定値を記載したファイル
-database/ #データベース関連のファイル -package.json/
-phpunit.xml
-public/
-readme.md
-resources/ #ViewのテンプレートファイルやLESSやSASSなどメタ言語ファイルを配置
-routes #アプリケーションのルート定義ファイル
-server.php
-storage/
-tests/ #テストコードを記載 
-vendor/ 

```

###ルーティング設定

以下が7つの基本ルーティングです。


(Controller名 @ アクション名)で書きます。


```php:/routes/web.php
Route::get('blogs', 'BlogsController@index')->name('blogs.index');
Route::post('blogs', 'BlogsController@store')->name('blogs.store'); 
Route::put('blogs/{id}', 'BlogsController@update')->name('blogs.update'); 
Route::get('blogs/{id}', 'BlogsController@show')->name('blogs.show'); 
Route::delete('blogs/{id}', 'BlogsController@destroy')->name('blogs.destroy');
Route::get('blogs/create', 'BlogsController@create')->name('blogs.create'); 
Route::get('blogs/{id}/edit', 'BlogsController@edit')->name('blogs.edit');
```

resourceなら上記のルーティングを１行で書けます。

```php:/routes/web.php
Route::resource('blogs', 'BlogsController')
```

ルーティング公式はこちらです。（laravel5.7　ルーティング）
https://readouble.com/laravel/5.7/ja/controllers.html

###コントローラ設定

コマンド操作でBlogsControllerを作ります。

```:コマンド操作
$ php artisan make:controller BlogsController
```

まずは一覧表示部分（index）を記述します。

```php:/app/Http/Controllers/BlogsController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request; 
use App\blog; #使うモデルを指定

class BlogController extends Controller 
  { 
    public function index()
      {
         $blogs = Blog::all();
         return view('blogs.index', [
         'blogs' => $blogs, 
         ]);
      }

#下記に続く

```

return view　の中では、
第一引数でblog.indexと表示したいViewを指定し、
第二引数である [‘blogs’ => $blogs] は blogs.index に渡すデータを指定します。

$blogs = Blog::all(); で blogのレコード全て取得することができます。


残りのfunctionも設定して行きます。
上から作成(create)、保存(store)、詳細(show)、編集(update)、更新(edit)、削除(destroy)機能です。


```php:/app/Http/Controllers/BlogsController

   public function create() 
     { 
         $blog = new Blog; 
         return view('blogs.create', [ 
             'blog' => $blog, 
         ]); 
     } 

   public function store(Request $request) 
     { 
         $blog = new Blog; 
         $blog->fill( $request->all() ); 
         $blog->save(); 
         return redirect('/blogs'); 
     } 

   public function show($id) 
   { 
         $blog = Blog::find($id); 
         return view('blogs.show', [ 
             'blog' => $blog, 
         ]); 
   } 

   public function edit($id) 
   { 
         $blog = Blog::find($id); 
         return view('blogs.edit', [ 
             'blog' => $blog,
         ]); 
   } 

   public function update(Request $request, $id) 
   { 
          $blog = Blog::find($id); 
          $blog->fill( $request->all() ); 
          $blog->save(); 
          return redirect('/blogs'); 
   } 
   public function destroy($id) 
   { 
          $blog = Blog::find($id); 
          $blog->delete(); 
          return redirect('/blogs'); 
   } 
 } 
```


###モデル設定

コマンド操作でBlogのモデルを作ります。

```:コマンド操作
$ php artisan make:model Blog --migration
```

```php:/app/blog.php

<?php
namespace App;
use Illuminate\database\Eloquent\Model;
class blog extends Model
  {
    protected $table = 'blog';
  }
```

上記でマイグレーションファイルも作成していると思いますが、「--migration」で作成していない場合は以下を実施

```:コマンド操作
$ php artisan make:migration Blogs_table
```

```php:/database/migrations/20XX_XX_XX_XXXXX_create_blogs_table.php

public function up()
  {
    Schema::create('blogs', function (Blueprint $table) {
      $table->bigIncrements('id');
      $table->string('title');
      $table->string('content');
      $table->timestamps();
    }); 
  }
```

マイグレーションファイルの中身を記述したらマイグレートします。

```:コマンド操作
$ php artisan migrate
```
マイグレーションの公式はこちらです。（laravel5.7）
https://readouble.com/laravel/5.7/ja/migrations.html

###ビュー設定

以下の所にファイルを作って、HTMLを書いて行きましょう。
laravelではテンプレートエンジンとして、blade.phpを使うことができます。

一覧ページ
/resources/views/blogs/index.blade.php
詳細ページ
/resources/views/blogs/show.blade.php
作成ページ
/resources/views/blogs/create.blade.php
編集ページ
/resources/views/blogs/edit.blade.php

###終わりに

ざっくり書いたので、補足事項や修正は随時行っていく予定です。
別の記事にも書くかもしれません。