ボス級社内SEのお役立ち技術情報

社内SEのシステム開発について。メインプログラム言語C#

【Laravel5.7】CRUDアプリケーションを最速で作成する① 基礎部分

f:id:HLSE:20190220191746p:plain

CRUDはWebアプリケーションの基本です。

作成の型は決まっているので

「CRUD作成のテンプレート」

として使用できるようにまとめてみました。

いづれは公式のScaforld実装され、このような手間もなくなるのでしょうが。。。 

 

なるべく最短最速を目指します。

ただ知らないことも多いので指摘頂けると幸いです。 

 

開発環境

OS:Windows10 64bit
XAMPP:v3.2.2
MySQL(MariaDB):10.1.35-MariaDB
Webフレームワーク:Laravel Framework 5.7.27
エディタ:VisualStudioCode 1.30.2

Laravelプロジェクト作成

最新バージョンでLaravelプロジェクト作成

composer create-project --prefer-dist laravel/laravel problemCollectionOne

 

カレントディレクトリを作成したプロジェクトに移動させます。

 

マイグレーション&シーダー&モデル&コントローラ&ファクトリー生成

①マイグレーション&シーダー作成

php artisan make:migration problem --create m_problem

php artisan make:seeder problemSeeder

 

【データベースの作成】

MySQLの場合、以下コマンドで作成する

mysql -u root -p

create database problemcollectionone;

grant all privileges on problemcollectionone.* to mysql@localhost identified by 'mysql';

データベース接続設定 (.env)

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=problemcollectionone
DB_USERNAME=mysql
DB_PASSWORD=mysql

Syntax error エラー対策

qiita.com

 

マイグレーションファイル編集

database\migrations\2019_02_21_132304_problem.php

public function up()
{
 Schema::create('m_problem', function (Blueprint $table) {
 $table->increments('id');
 $table->string('problemId');
 $table->dateTime('problemUpdateTime');
 $table->text('problemTitle');
 $table->string('problemCategory');
 $table->text('selectItem1');
 $table->text('selectItem2')->nullable();
 $table->text('selectItem3')->nullable();
 $table->text('selectItem4')->nullable();
 $table->text('selectItem5')->nullable();
 $table->text('selectItem6')->nullable();
 $table->text('memo')->nullable();
 $table->boolean('yesNoProblemFlag');
 $table->integer('explainId')->nullable()->default(0);
 $table->softDeletes();
 $table->timestamps();

 $table->unique(['problemId', 'problemUpdateTime']);
 });
}

 

シーダーファイル編集

database\seeds\DatabaseSeeder.php

public function run()
{
  // $this->call(UsersTableSeeder::class);
  $this->call(problemSeeder::class);
}

database\seeds\problemSeeder.php

public function run()
{
\DB::table('m_problem')->delete();
\DB::table('m_problem')->insert([
 'problemId' => '28_1',
 'problemUpdateTime' => new \DateTime(),
 'problemCategory' => '情報セキュリティ総論',
 'problemTitle' => '情報セキュリティの要素の一つである「真正性」の具体例・・・',
 'selectItem1' => '',
 'selectItem2' => '',
 'selectItem3' => '',
 'selectItem4' => '',
 'selectItem5' => '',
 'selectItem6' => '',
 'memo' => '',
 'yesNoProblemFlag' => true,
 'explainId' => 0,
]);
}

 

マイグレーションコマンドを実行しデータベースにエラーなく作成されるか確認する

・全てのテーブルを再作成コマンド

php artisan migrate:reset

 ・シーダーの実行

php artisan db:seed

 

②モデル&コントローラ&ファクトリー&バリデーション作成

php artisan make:model Models/Problem -c -r -f

php artisan make:request ProblemValidationRequest

 

・モデルにテーブル指定と論理削除行を追加する

 $guardedはupdate&createなどで編集できない列を指定

class problem extends Model
{
 use SoftDeletes;
 protected $table = 'm_problem';
 protected $guarded = [
 'id',
  ];
}

 

③ルートにresource追加

新規作成、更新、削除、一覧、詳細のルートを全て記載

routes/web.php 

gist30c7df5bc5fda3ab7cddf90b9cbd6479

 

データ確認 

ここまででとりあえずデータベース連携はできて、

データベースからデータの取得ができるようになっているはずです。

コントローラのindexメソッドに以下を追加して

ブラウザよりアクセスして確認します。

 

app\Http\Controllers\ProblemController.php

public function index()
{
 $temp = problem::all();
 dump($temp);
}

ビルドインサーバ起動

php artisan serve --host 0.0.0.0

ブラウザよりアクセスして以下画面になっていればデータが取得できています!

http://localhost:8000/problem/

Collection {#233 
  #items: array:1 [
    0 => problem {#234 
      #table: "m_problem"
      #connection: "mysql"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:17 []
      #original: array:17 []
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
      #guarded: array:1 []
      #forceDeleting: false
    }
  ]
}

 

その他設定

config\app.php

'timezone' => 'Asia/Tokyo',
'locale' => 'jp',

 

 

とりあえず、ここまでがCRUDアプリケーション作成の基本部分です。

ここまで読んでいただきありがとうございます。

 

続きは、別記事に記載します。