このブログはプログラム開発や学習などの際に役立つ知識や情報を発信するエンジニアのためのトータル技術ブログです。
ご意見やご要望にも積極的に答えていきますので、お気軽にお問い合わせください。

記事へのリクエストはこちら

【Laravel】ファイルアップロードの機能追加と一緒にマイグレーションで DB に変更をする方法

Laravel
スポンサーリンク
きつね先生
きつね先生

本日は既存のアプリへファイルアップロード機能の追加を行い、それに伴うデータベースの変更処理を勉強していきましょう!

 

 

わんぽち
わんぽち

むずかしそうだワン。。。

 

 

にゃんみ
にゃんみ

コマンドからデータベースの変更とかしないといけないのかにゃ?

 

 

きつね先生
きつね先生

Laravel ではマイグレーションから簡単にデータベースの変更ができます。ファイルアップロードも便利なメソッドがあり少ない記述で実装できますのでやっていきましょう!

 

 

こんにちは!あっきーです!

前回の記事で紹介したデータベースを使った Webアプリを元にデータベースに変更を加え機能を追加する方法を記事にしました。

元の Webアプリの作り方を確認する場合はこちらを確認してください。

 

【Laravel】Web アプリをつくりながら Eloquent ORM モデルでのデータベース操作を学ぶ
きつね先生 今日はウェブアプリをつくりながらモデルのつかいかたを学んでいきましょう! わんぽち モデルをつかうとなにがいいんだわん? きつね先生 ...

 

今回の記事で得られる知識以下になります。

 

・マイグレーションでデータベースの変更方法
・ファイルアップロード機能の実装方法

 

それではまとめていきます。

 

スポンサーリンク

完成イメージ

 

前回記事の完成イメージの画面に赤枠部分を追加していきます。

 

・表示ページ

 

・登録ページ

 

・バリデーション

 

マイグレーションでデータベースを変更する

 

開発を続けていくと、テーブルにカラムを追加する必要があったり、初期で決めたカラムの定義を変更する(カラム名の変更・カラムの追加など)必要も出てくる場合があります。その時に Laravel はマイグレーションで構築が簡単に行うことができます。

その場合は、最初のデータベースを構築するときに作成したマイグレーションファイルを編集するのではなく、新たにマイグレーションファイルを作成し、その都度スキーマビルダで記述していきます。

 

カラムを変更するためのパッケージをインストール

 

Laravelでは、デフォルトのままではカラム変更のマイグレーションは行えません。新たにパッケージを導入する必要があります。

パッケージをインストールするために以下のコマンドを実行してください。

 

・Composer からパッケージのインストール

ターミナル

 

変更用のマイグレーションファイルを作成

 

・変更用のマイグレーションファイル生成

ターミナル

 

コマンドで生成したマイグレーションファイルに変更内容を記述していきます。

 

database/migrations/2019_02_28_144834_change_comics_table.php

※メソッド以外は部分的に省略しています。

string 型の新規のカラム「image」を既存のカラム「description」の後ろに追加し null での追加を許可するという記述を up() メソッド内に記述しました。

 

たぬきち仙人
たぬきち仙人

追加でなく変更の場合は対象のカラムを指定して ->change() とメソッドを記述すればできるのじゃ。

 

続いて down() メソッド内に up() メソッドでのデータを記述しておき間違えた時に戻せるようにしておきます。

 

・マイグレーションの実行

ターミナル

 

・元に戻したい時

ターミナル

 

アップロード機能の実装

 

デフォルトでのアップロードファイルは storage/app/public フォルダ配下のディレクトリに保存されます。Web からのアクセスを許可するためには public/storage からのシンボリックリンクを配置する必要があります。

シンボリックリンクはショートカットフォルダをイメージしていただければ良いかと思います。

以下のコマンドからシンボリックリンクを生成します。

・シンボリックリンクの生成

ターミナル

 

画像の保存先の設定ができましたのでアップロード機能の記述をしていきましょう。

 

バリデーション設定

 

前回の記事で作成したバリデーションのファイルに以下の記述を追加します。

 

app/Http/Requests/ComicRequest.php

 

rules() メソッドにバリデーションの内容を記述して messages() メソッドでレスポンスで画面に表示されるバリデーションのメッセージをオーバーライドします。

rules() メソッドには拡張子の指定と画像ファイルの大きさを指定しています。

 

コントローラーの編集

 

前回記事で作成したコントローラに以下の修正を加えます。

 

app/HTTP/Controllers/ComicController.php

 

ビューテンプレート

 

同じく前回記事で作成したビューテーンプレートファイルに以下の修正を加えていきます。

 

・登録ページ

resources/views/comic/add.blade.php

 

・表示ページ

resources/views/comic/index.blade.php

 

画像データの有無をチェックしてからデータがない場合はあらかじめ保存しておいた画像(今回では NOIMAGE の画像)を表示するようにしています。

 

以上で完成です。

完成イメージのように追加した画像データが表示されるようになっているかと思います。

 

さいごに

 

最後まで読んでいただいてありがとうございます。

ファイルアップロード機能の記事だけでは物足りないかなと思い既存のデータベースに変更を加えてから行う記事にしてみましたがいかがでしたでしょうか。

次は CRUD 処理の機能の追加なども記事にしてみようかと思います。

プログラムの間違えなどありましたら教えていただけましたら幸いです。

この記事を気に入っていただけましたらTwitter でもプログラミングのことについてツイートしていますので是非ご一緒にフォローの方もお願いします!

それでは次の記事でまたお会いしましょう!

 

・参考書籍

スポンサーリンク
あっきー

元キャバクラ店長から未経験でエンジニアに転職した異端児。

「週4の5時間勤務、月収100万円」を実現させ、ゆるりと生きることを目標に日々パソコンと奮闘している。

自分の経験を元に、未経験からでも挫折しないプログラミングの勉強方法や最新技術や情報などを発信していきます。

あっきーをフォローする
LaravelMySQLPHP
\良い記事だったらシェアしてね!/
スポンサーリンク
駆け出しエンジニアのつぶやき