9
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【laravel】CRUD構築

Posted at

###趣旨

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名 @ アクション名)で書きます。

/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なら上記のルーティングを1行で書けます。

/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)を記述します。

/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)機能です。

/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
/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
/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

###終わりに

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

9
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?