teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

書式の改善

2021/12/25 05:28

投稿

skys215
skys215

スコア910

answer CHANGED
@@ -1,3 +1,23 @@
1
+
2
+ この一行だけで複数のファイルをアップロードできます。
1
3
  ```HTML
2
- <input type="file" multiple="multiple" class="form-control" placeholder="" name="attachment[]" multiple value="" >
3
- ```
4
+ <input type="file" class="form-control" placeholder="" name="attachment[]" multiple value="" >
5
+ ```
6
+ 1. multipleがついてるのでファイルを複数選択できる。
7
+ 2. nameに[]がついてることでバックエンドでアップロードしたファイルを配列として得ることができます。
8
+
9
+ ただし、アップロード後ファイルの添削、ファイルのプレビュー(イメージの場合)など行いたい場合はDropzone.jsなどのライブラリーを使って実装することをお勧めします。
10
+
11
+ データベースでは、5つカラム設定する必要はありません。[1対多](https://readouble.com/laravel/8.x/ja/eloquent-relationships.html#one-to-many)で複数のモデルを一つのモデルに関連することができます。
12
+
13
+ ②バリデーションでは`attachment[]`は配列であるため、[min](https://readouble.com/laravel/8.x/ja/validation.html#rule-min)で最低1枚の制限を設定できて、[max](https://readouble.com/laravel/8.x/ja/validation.html#rule-max)で最大5枚まで投稿できる制限を設定できます。
14
+
15
+ ③普段投稿したイメージの内容はデータベースに保存しません。保存するのはファイルのパスです。
16
+ なのでそのままイメージを表示することはできません。<img>要素を用いて表示します。
17
+ もし上記のリレーションを使えばこんな感じです:
18
+ ```PHP
19
+ @foreach($post->images as $image)
20
+ <img src="{{ $image->url }}"/>
21
+ @endforecah
22
+ ```
23
+ (imagesテーブルにurlカラムにファイルのURLが保存している場合)