Presentation is loading. Please wait.

Presentation is loading. Please wait.

Laravel 5.5 をはじめよう 17/9/15 株式会社 LUPINUS.

Similar presentations


Presentation on theme: "Laravel 5.5 をはじめよう 17/9/15 株式会社 LUPINUS."— Presentation transcript:

1 Laravel 5.5 をはじめよう 17/9/15 株式会社 LUPINUS

2 1. Laravelとは Laravelの特徴 バージョンによる違い
〇Laravel(ララベル)は、フルスタックなPHPフレームワークで、ルーティング、コントローラ、ビュー、ORM(オブジェクト関係マッピング)など基本的な機能を備え、さらに近代的なWebアプリで活用されるジョブキューやWebストレージなども積極的に統合している。 MITライセンスの下でリリースされており、そのソースコードはGitHubにホスティングされている。 Laravelの特徴 ・コードが読みやすく、書きやすい ・学習コストの低さ ・強力なルーティングフィルター ・柔軟なオートローダー ・簡単なページネーション ・ビューをサポートするコンポーサー バージョンによる違い Laravelはバージョンの違いが結構大きいので注意 ・Laravel4以降はComposerでパッケージの依存管理をするようになった ・Laravel5以降はディレクトリ構成が大きく変わっている ・Laravel5.5以降はPHP7.0以降がサーバ要件となるので、同じ5系でも注意 ・Laravel5.4はPHP5.6以降 <公式サイト> ⇒今回はLaravel5.5を使用してみる。

3 2.開発環境構築(Windows+XAMPP)
・まずはPHP7系が動くXAMPPをインストールする   2.Composerの用意 ・次にLaravel5のインストールに必須であるComposerをインストールする   ※インストールしたXAMPPのphp\php.exeを選ぶこと。 ※xamppのフォルダ名を変えている場合、php.ini、httpd.conf、httpd-ssl.conf、httpd-xampp.confのフォルダ名を変えておくこと。 (例)extension_dir=“\xampp\php\ext” ⇒ extension_dir="\xampp_php7\php\ext“ ※今回はproxyは使わないので無視して先に進む。 ※公式ではLaravel HomesteadというLaravelで使うソフトウェアがすべて詰まった開発環境が推奨されているが、有料ソフトが必要なのでやらない。

4 2.開発環境構築(Windows+XAMPP)
3.Laravel 5のインストール ・Composerインストール先の/vendor/binが環境変数Pathに設定されているか確認する (例)C:\Users\LUPINUS\AppData\Roaming\Composer\vendor\bin ・コマンドプロンプトを開き、xamppのhtdocsフォルダに移動する >cd c:\\xampp_php7\\htdocs ・Laravelのプロジェクトを作成する >composer create-project --prefer-dist laravel/laravel test ※testは任意のプロジェクト名 ・インストールに成功すると、htdocsの下にtestフォルダが出来る

5 2.開発環境構築(Windows+XAMPP)
4.Laravel 5の動作確認 ・XAMPPコントローラーからApache起動 ・「 publicディレクトリ直下のindex.phpは、アプリケーションへ送信された、全HTTPリクエストを始めに処理するフロントコントローラとして動作する。 ※httpd.confでWebサーバのドキュメントルートをpublicフォルダ以下にすると、URLから[/test/public]がなくなる。httpd.confが変更できるサーバであれば、こういったことは可能。 出来ない場合、.htaccessの変更や、public以下をドキュメントルートに配置する方法を取るしかない。 (例)DocumentRoot "/xampp_php7/htdocs/test/public"

6 3.Laravelのディレクトリ構造 app アプリケーションのコアコードを配置する。
アプリケーションのほとんど全部のクラスは、このディレクトリの中に設定される。 bootstrap フレームワークの初期起動やオートローディングの設定を行うファイルが設置されている。 config アプリケーションの全設定ファイルが設置されている。 database データベースのマイグレーションと初期値設定(シーディング)を配置する。 public アプリケーションへの全リクエストの入り口となるindex.phpファイルを持っている。 また、このディレクトリにはアセット(画像、JavaScript、CSSなど)を配置する。 resources ビューやアセットの元ファイル(LESS、SASS、JavaScript)で構成されている。 また、すべての言語ファイルも配置する。 routes アプリケーションの全ルート定義が設定される。デフォルトでは、web.php、api.php、console.php、channels.phpファイルが含まれている。 storage コンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュなど、フレームワークにより生成されるファイルが保存される。 tests 自動テスト用のクラスを配置する。テストクラスはTestというサフィックスを付ける。 Laravelでは、PHPUnitでテストを実行する。 vendor Composerによる依存パッケージが配置される。

7 4.Laravelのライフサイクル Laravelフレームワークを使うためには、ライフサイクルを学ぶと早い。
そうすることで、フレームワークのどこをどう変更すれば やりたいことを実現できるかが分かるようになる。 Laravelのリクエストのライフサイクルを大まかに表現するとこんな感じ・・・ ルーティング⇒URL構造 コントローラ⇒リクエスト処理 モデル⇒データアクセス ビュー⇒画面生成 例えばURL構造を変えたい場合、Laravelのルーティング定義を変えればいい⇒あとはそれをどう変えればいいかを調べればいい⇒・・・ というように開発の取っ掛かりを見つけやすくなっている。主なPHPフレームワークは大体こんな感じになっているので、どのPHPフレームワークでも開発者の手の着け方はほとんど変わらない。

8 4.Laravelのライフサイクル サービスコンテナ (Application) カーネル(Karnel)
HTTPリクエスト 生成 /public/ index.php サービスコンテナ (Application) 生成 カーネル(Karnel) 保持 ミドルウェア(Middleware) 呼び出し (/app/Http/Karnel.phpに定義) handle() ・環境変数(.envファイル) ・configフォルダ以下登録 ・エラー処理定義登録 ・ファサード登録 (app.phpの’aliases’) ・サービスプロバイダ登録 (app.phpの’providers’) ・サービスプロバイダの起動処理 (各サービスプロバイダのboot() 実行) bootstrap() サービスプロバイダ (Service Provider) 認証、セッション、暗号化、キュー、データベース、キャッシュ、メール、ページネーション、バリデーションなどなど・・・ ミドルウェアの前処理を順に実行する ルートが決定 (/routeディレクトリ以下に定義) 必要なインスタンスはサービスコンテナを介して生成 ルータのディスパッチ処理 Route Model Binding を実行 コントローラメソッドのインジェクション処理 ルートに割り当てられたミドルウェアの前処理を順に実行する ※ライフサイクルの外側から内側にかけて開発していくのが楽かと思う(個人の好みもあるのでどっちでもよいが)。 シンプルなウェブサイトであれば、 1.ルーティング作成 (/route/XXX.php) 2.コントローラ作成 (/app/Http/Controllers以下) 3.ビュー作成 (/resources/views/xxx.blade.php作成) といった流れ。 コントローラのコンストラクタの実行(インジェクション処理含む) コントローラ実行 コントローラメソッド実行 (DBにアクセスしたり、Viewを戻したり、いろいろできる) (Viewは/resources/viewsに定義) HTTPレスポンス ミドルウェアの後処理を前処理の逆順に実行する 呼び出し ミドルウェアのterminate()実行 ルートに割り当てられたミドルウェアの後処理を前処理の逆順に実行する レスポンスオブジェクト生成

9 5.ここまでの超簡単な用語集 /public/index.php カーネル ミドルウェア サービスコンテナ サービスプロバイダ ファサード
すべてのリクエストがこのファイルを通るようになっている。 カーネル リクエストを送るとレスポンスを返すだけの大きなブラックボックス。前述のとおり、中ではいろんなことをやっている。 ミドルウェア 簡単に言うとフィルタ。全リクエストに認証をかける、HTTPヘッダを書き換えるなどできる。特定のルートにのみフィルタをかけることもできる。 サービスコンテナ クラス間の依存性を管理するための仕組み。クラスのインスタンスを生成するのにnewを使わず、名前等でどのクラスのインスタンスを生成するのか指定できるようになる。 サービスプロバイダ サービスコンテナにいろんなものを登録する初期起動処理を行うクラス。 サービスコンテナの名前を指定するとどんなインスタンスを返すのか・・・それを登録するのがサービスプロバイダ。その登録することを「依存性の注入」といい、名前を使ってインスタンスを生成することを「依存性の解決」と呼んでいる。 ファサード Javaでいう静的クラス。依存性の注入なしで、簡単な記述でメソッドを使える。

10 6.動作確認でなぜWelcomeページが見れたのか
■ルーティング インストール後、ルーティング定義の格納場所は以下のようになっている。 ファイル名の「api」や「web」はミドルウェアグループ名と同じなっていて、それぞれのルーティング定義はファイル名と同じ名前のミドルウェアグループにアサインされる。 つまり、Webサイトを作る場合は「web.php」にルーティング定義を書けばいい。 Route::get('/', function () { return view('welcome’); }); 「web.php」のコードはインストール時、左の内容だけである。 基本的にルーティング定義はURIと「クロージャ」で出来ている。この場合は、ルートディレクトリのURLにアクセスすると、「welcome」という名前のビューを返すというのが一目でわかるだろう。分かる人は分かるかもしれないが、このルーティング定義ではコントローラを使っておらず、ビューを返しているだけである。なので、次はビューを確認する。 ■ビュー インストール後、ビュー定義の格納場所は以下のようになっている。 「welcome.blade.php」というファイルがある。LaravelではBladeというテンプレートエンジンを使っていて、その拡張子は「.blade.php」である。つまり、このファイルは「welcome」というビューのBladeテンプレートファイルである。 というわけで、動作確認でルートディレクトリのURLでアクセスしたとき、ルーティング定義に書いてあるとおり、「welcome」というビューが表示されたのだと分かる。

11 7.簡単なWebサイトを作ってみる ■設計 やりたいこと ・cssはSassやLessなどのメタ言語を使用したい
以下の簡単なWebサイトを作りながら、Laravelの基本を押さえていく。 / TOPページ ・連絡先一覧 /edit/連絡先ID 入力ページ ・連絡先フォーム /confirm 確認ページ ・連絡先 /complete 完了ページ 編集 次へ 戻る 登録 削除 連絡先 やりたいこと ・cssはSassやLessなどのメタ言語を使用したい ・ReactやVueなどのJavascriptフレームワークを使用したい ・バリデーション ・ページネーション ・ログ/エラー処理 ・自動テスト

12 8.開発対象を考える 最初の簡単な遷移図から、今回作らなければならないものを考える。ということで、作るものを考えつつ、最初の遷移図を少し膨らませる。 (1)初期表示 ミドルウェア コントローラ モデル / 一覧 連絡先 初期表示 TOPページ 一覧 (2)削除 ミドルウェア コントローラ モデル 一覧 連絡先 TOPページ 初期表示 一覧 (3)新規登録 ミドルウェア コントローラ モデル /edit 編集 (遷移のみ) 編集ページ 入力データ バリデーション /confirm 確認 入力データ 入力エラー 連絡先 確認ページ /complete 入力データ 完了 新規登録 完了ページ

13 8.開発対象を考える このぐらいまで考えると、おおまかに調べたいことが浮かぶ。 ・Laravel5 SASS ⇒ アセットコンパイル
(4)更新 ミドルウェア コントローラ モデル /edit/連絡先ID 編集 連絡先 404ページ (デフォルト) 連絡先存在 エラー 連絡先 編集ページ 入力データ 連絡先 /confirm バリデーション 確認 入力データ 入力エラー 確認ページ /complete 入力データ 完了 更新 完了ページ このぐらいまで考えると、おおまかに調べたいことが浮かぶ。 ・Laravel5 SASS ⇒ アセットコンパイル ・Laravel5 Vue ⇒ スカフォールド その他の一次キーワードとして、ルーティング、コントローラ、ビュー、バリデーション、エラーログ、データベースなどが挙げられるだろう。あとはそこから展開すればよい。

14 9.アセットコンパイル ■アセットコンパイルとは ■Nodeのインストール ■Laravel Mixのインストール
LaravelにはLaravel MixというCSSやJSをコンパイルするための仕組みがある。 CSSではLESS、SASS、Stylusなど、JSではECMAScript 2015のコンパイルやReact、Vueのコンパイルもできる。 効率のいいフロントエンド開発を行う現場なら必ず使っている言語を、Laravel Mixでまとめてコンパイルして展開することができる。 ■Nodeのインストール Laravel Mixをインストールするためには、NodeとNPMが必要になるので、まずはそれらをインストールする。下記からNode.jsをインストールすれば、NPMもインストールされる。 >node -v v6.11.3 >npm -v ■Laravel Mixのインストール NPMを使ってLaravel Mixをインストールする。Laravelのプロジェクトフォルダ(package.jsonというファイルがあるフォルダ)に移動して、以下のコマンドを実行する。 >npm install

15 9.アセットコンパイル ■Laravel Mixの実行
Laravel Mixを実行する際、コンパイルしたいリソースファイルと展開先のディレクトリ(ファイル名を指定すればファイル名も変えられる)を、Laravelのプロジェクトフォルダ直下にあるwebpack.mix.jsに定義する。 デフォルトでは下のようになっている。 mix.js('resources/assets/js/app.js', 'public/js’) .sass('resources/assets/sass/app.scss', 'public/css'); 上記のように、コンパイルする順にチェーンできる。 Laravel Mixの実行は、下記のコマンドを実行すればいい。 >npm run dev ファイルを圧縮したい場合(本番リリース時など) は、次のコマンドを実行する。 >npm run production

16 今後はBladeテンプレートにVueコンポーネントを埋め込んで画面を作成していくことになる
10.スカフォールド ■スカフォールドとは スカフォールド(Scaffold)とは、コマンド1つ実行するだけで、アプリケーションに必要なコントローラ、ビュー、モデルを自動的に作成してくれる機能のこと。Ruby on Railsにもあるようだ。 LaravelではBootstrapとVueがデフォルトでスカフォールドの対象になっている。もちろん、他のCSSやJavascriptを使うこともできる。とにかくデフォルトで試してみる。 Laravelはデフォルトで、「インストール先フォルダ/resources/assets/js/components」ディレクトリの中にExample.vueというVueコンポーネントを持っている。 そして、/assets/jsにあるapp.jsというファイルの中で、そのビューコンポーネントを呼び出していることが分かる。 Vue.component('example', require('./components/Example.vue')); ※インストールしたてであれば、「make:auth」Artisanコマンドを使って、基本的なログイン機能をもったアプリケーションを自動で作成できる。 >cd インストール先フォルダ >php artisan make:auth 「インストール先/resources/views/auth」フォルダ内のlogin.blade.phpファイルに以下のコードを追加すれば、先ほどのVueコンポーネントの内容を埋め込むことができる。 @section('content’) <example></example> @endsection ※Vueコンポーネントを変更してアプリケーションに反映させたい場合、 必ず「npm run dev」コマンドを実行すること 今後はBladeテンプレートにVueコンポーネントを埋め込んで画面を作成していくことになる >npm run dev

17 11.ルーティング ■ルーティングとは 実際のファイル構造と関係なく、任意のURLで任意のファイルやサービス、コードと関連付けることができる仕組み。代表的なルーティングの書き方をまとめた。 Route::get('/user', URL「 Route::get($uri, $callback) Route::post($uri, $callback) Route::any($uri, $callback) HTTPのgetメソッドでの通信のみ通るルートを定義する場合の書き方。post、putなどもある。anyメソッドは、すべてのメソッドの通信が通るルート。 ※postルートへ渡す<form>タグはCSRFトークンフィールドを含んでいる必要があり、その場合、フォームタグはこう書かなければならない。 <form method="POST" action="/profile"> {{ csrf_field() }} ... </form> Route::redirect('/here', '/there', 301); リダイレクトする場合 Route::view('/welcome', 'welcome’, ['name' => 'Taylor']); ビューを直接返す場合。第3引数はビューに渡すデータ配列。 Route::get('user/{id}', function ($id) { return 'User '.$id; }); Route::get('user/{name?}', function ($name = null) { return $name; URLセグメントを受け取りたい場合。ここで定義するルートパラメーターの名前はアルファベットとアンダーバーのみ許可。 また、セグメントが任意の場合、「?」をつける。この場合、デフォルト値を定義する必要がある。 Route::get('user/profile', function () { // })->name('profile'); 名前付きルート。ルートに名前をつけておくと、「$url = route(‘profile’);」といったように、クラス内でURLを簡単に取得できる。

18 12.コントローラ ■コントローラとは コントローラは、MVCモデルでいうモデルとビューの間に入り、リクエスト処理を行う役割を持つ。
Webアプリケーションのコントローラは、よく関連のあるHTTPリクエストの処理ロジックを一つのクラスへまとめ、グループ分けを行ったりする。 <?php // 基本的なコントローラクラスの書き方 namespace App\Http\Controllers; use App\User; use App\Http\Controllers\Controller; class UserController extends Controller { /** * 指定ユーザーのプロフィール表示 * int $id ← ルートパラメータを引数にする Response */ public function show($id) return view('user.profile', ['user' => User::findOrFail($id)]); } //ルーティング定義でルートに対してミドルウェアを適用する場合 Route::get('profile', //コントローラのコンストラクタの中でミドルウェアを指定する方法 public function __construct() { // すべてのメソッドに適用 $this->middleware('auth’); // 特定のメソッドのみ適用 $this->middleware(‘log’)->only(‘index‘); // 特定のメソッドを除いて適用 $this->middleware('subscribed')->except('store'); } // コンストラクタインジェクション // コンストラクタに必要な依存インスタンスを注入できる /** * ユーザーリポジトリインスタンス */ protected $users; public function __construct(UserRepository $users) { $this->users = $users; } // メソッドインジェクション //コントローラーのメソッドでもタイプヒントにより依存を指定することもできる public function store(Request $request) { $name = $request->name; // }

19 13.ビュー(Bladeテンプレート) ビューについては、ほぼBladeテンプレートだと思っていい。基本的な方針として、まずは全体のベースとなるページレイアウトを作成し、各ページ用の子テンプレートを作成する。 <!--全体のベースとなるレイアウト(views/layouts/app.blade.php)--> <!DOCTYPE html> <html lang="{{ app()->getLocale() }}"><head> <meta charset="utf-8"> <!-- CSRF Token --> <meta name="csrf-token" content="{{ csrf_token() }}"> <!-- Styles --> <link href="{{ asset('css/app.css') }}" rel="stylesheet"> </head> <body> <div id="app"> @section(‘sidebar’) @show ・・・・・・ @yield('content’) </div> <!-- Scripts --> <script src="{{ asset('js/app.js') }}"></script> </body> </html> {{ $変数 }} ビューに渡された変数やPHPコードをエコーできたりする(echoが省略されているのでechoとわざわざ書かないように注意)。 @section(セクション名) ・・・・・・ @show @endsection @yield(セクション名) 子テンプレート側それぞれに定義させる部分を親側で定義できる。継承不可だが、初期値を設定できる。 親テンプレートの内容を表示する。 @include(テンプレート名) 他のBladeテンプレートを読み込む。変数を渡すこともできる。 ※テンプレート名は、views直下をルートとしたディレクトリ+ファイル名の指定の仕方。 例えば、views/layouts/app.blade.phpであれば、「layouts.app」と、ディレクトリ階層は.(ドット)、ファイル名はblade.phpを省略した名前で指定する。 @extends(テンプレート名) 継承する親テンプレートの指定。左記の例のとおり、子テンプレートは拡張したいセクションの内容を記述する形になる。 <!--ベースを継承する子レイアウト--> @extends('layouts.app') @section('title', 'Page Title') @section('sidebar') <p>ここはメインのサイドバーに追加される</p> @endsection @section('content') <p>ここが本文のコンテンツ</p>

20 13.ビュー(Bladeテンプレート) Bladeテンプレートの構文 if文 @isset @empty switch文 コメント
@if (count($records) === 1) 1レコードある! @elseif (count($records) > 1) 複数レコードある! @else レコードがない! @endif @isset @isset($records) // $recordsは定義済みでnullでない @endisset @empty @empty($records) // $recordsが「空」だ @endempty switch文 @switch($i) @case(1) 最初のケース @break @case(2) 2番めのケース @default デフォルトのケース @endswitch コメント {{-- このコメントはレンダー後のHTMLには現れない --}} 繰り返し文 @for ($i = 0; $i < 10; $i++) 現在の値は: {{ $i }} @endfor @foreach ($users as $user) @if ($user->type == 1) @continue @endif <li>{{ $user->name }}</li> @if ($user->number == 5) @break @endforeach ループ変数 @if ($loop->first) これは最初の繰り返し @if ($loop->last) これは最後の繰り返し <p>これは {{ $user->id }} ユーザーです。</p> ※親ループのループ変数にアクセス可能 @foreach ($user->posts as $post) @if ($loop->parent->first) これは親のループの最初の繰り返しだ

21 14.バリデーション 簡単なバリデーション 最初のバリデーション失敗時に停止したい場合 エラーメッセージをビューに表示 フォームリクエスト
public function store(Request $request) { $request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); // 処理 } コントローラにおいて、HTTPリクエストをメソッドインジェクションし、そのリクエストに対してバリデーションを行うメソッドを呼ぶだけ。 バリデーションに失敗すれば、適切なレスポンスが自動的に生成される。 最初のバリデーション失敗時に停止したい場合 'title' => 'bail|required|unique:posts|max:255', bailルールを使う。 デフォルトでは記述順に左から全チェック行う。 エラーメッセージをビューに表示 @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif Laravelはバリデーション失敗時、自動的にユーザーを以前のページヘリダイレクトする。 付け加えて、バリデーションエラーは全部自動的にフラッシュデータとしてセッションへ保存される。 ⇒自動リダイレクトしたくないときは、Validatorファサードでバリデータを作成する方法がある フォームリクエスト ※バリデーションが複雑とか多いときに使う 1.「php artisan make:request フォームリクエストクラス名」コマンドを実行する。 2.出来上がったクラスのrulesメソッドをカスタマイズする public function rules() return [ ]; 3.コントローラで使う public function store(フォームリクエストクラス名 $request)

22 14.バリデーション エラーメッセージのカスタマイズ(フォームリクエストの場合) 使用可能なバリデーションルール
public function messages() { return [ 'title.required' => 'A title is required', 'body.required' => 'A message is required', ]; } フォームリクエストクラスのmessagesメソッドをカスタマイズする 使用可能なバリデーションルール 詳しくは公式ドキュメントで

23 15.エラーログ ログ定義は「config/app.php」にある。
'debug' => env('APP_DEBUG', false), Trueにするとデバッグモードになりログの表示量が増える。 開発時はtrueにしとくべき。 'log' => env('APP_LOG', 'single'), ログの書き込み先ファイル。 単一ファイル(single)、日別ファイル(daily)、 システムログ(syslog)、エラーログ(errorlog) 'log_max_files' => 30, 日別ファイルにログを書き込む場合、デフォルトで5日分ログを保持する。それを変えたい場合は最大ファイル数の定義を追加する。デフォルトではapp.phpに定義されていない。 'log_level' => env('APP_LOG_LEVEL', 'debug'), ログレベル。 debug、info、notice、warning、error、critical、alert、emergencyの順で重大度が増す。 Laravelのログ機能はデフォルトで、アプリケーションの日別ログファイルを「storage/logs」ディレクトリへ作成するように設定されている。ログへ情報を書き込むにはLogファサードを使用する。 <?php ・・・・・・ use Illuminate\Support\Facades\Log; class UserController extends Controller { public function showProfile($id) Log::info('ユーザーのプロフィール表示。 ID:'.$id); //ログにコンテキストデータを渡すこともできる Log::info('User failed to login.', ['id' => $user->id]); return view('user.profile', ['user' => User::findOrFail($id)]); } ログレベルに応じたメソッドが用意されている。 Log::emergency($message); Log::alert($message); Log::critical($message); Log::error($message); Log::warning($message); Log::notice($message); Log::info($message); Log::debug($message); ちなみに「resources/views/errors/404.blade.php」を作成すると、カスタマイズした404ページを表示することができる。

24 16.データベースの準備 今回はPostgreSQLを使用。 PostgreSQLのインストールは下記参照。
PostgreSQLのインストールを確認したら、ロール(ユーザ)とデータベースを作成する。 postgres=> CREATE ROLE ユーザ名 WITH LOGIN PASSWORD ‘パスワード’; このロールにスーパーユーザのロールを追加する(スキーマ作ったりするので)。 postgres=> ALTER ROLE ユーザ名 WITH SUPERUSER; いったん終了して、作ったロールで入りなおす。 postgres=> \q > psql –U taka –d postgres データベースを作成する。 postgres=> CREATE DATABASE taka_db; PostgreSQLの操作はここまで。 Laravelのデータベース設定ファイルは「config/database.php」にある。Laravelが使用しているDMSはMySQL、SQLite、PostgreSQL、SQL Server。デフォルトのデータベースシステムをPostgreSQLにしておく。 'default' => env('DB_CONNECTION', 'pgsql'),

25 17.マイグレーション ■マイグレーションとは
マイグレーションとはデータベースのバージョンコントロールのような機能で、DBスキーマからテーブルを作成してくれる。 マイグレーションの雛形を作るため、Artisanコマンドを実行する。最後の引数はファイル名であり、マイグレーションクラス名になるので注意。 >cd インストール先フォルダ >php artisan make:migration create_test_table 成功すると、「database/migrations」フォルダの下にマイグレーションが作成される。 マイグレーションを実行すると、フォルダのマイグレーションをすべて実行する。必要なマイグレーションファイルだけにして、マイグレーション実行してみる。 エラーが出てうまくいかないときは、「/.env」環境定義ファイルのDB設定部分をPostgreSQLに書き換えた後、 Artisanコマンドで「config:cache」し、設定を反映させる必要がある。 作りたいテーブル定義に合わせてどういったコードが必要になるかは、公式参照。 >php artisan migrate DB_CONNECTION=pgsqlDB HOST= DB_PORT=5432 DB_DATABASE=taka_db DB_USERNAME=taka DB_PASSWORD=9ZUbrQekHSa3 >php artisan config:cache > psql –U taka –d taka_db taka_db=> \dt; #テーブル一覧表示


Download ppt "Laravel 5.5 をはじめよう 17/9/15 株式会社 LUPINUS."

Similar presentations


Ads by Google