質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4825閲覧

laravel ファイルの複数アップロードについて

yoyoyo

yoyoyo

総合スコア10

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/02/02 13:59

編集2022/02/04 13:45

laravelで画像の複数投稿機能を作成しています。
multipleではなくinput要素を増やす形で実装したいのですが、コントローラー側の処理を画像1件の状態から
どのように変更すれば良いのかが分かりません。

bladeの該当箇所は

PHP

1<div class="form-group"> 2  <input type="file" id="image1" name="image[]" accept=".png, .jpg, .jpeg, .pdf, .doc"> 3  <input type="file" id="image2" name="image[]" accept=".png, .jpg, .jpeg, .pdf, .doc"> 4  <input type="file" id="image3" name="image[]" accept=".png, .jpg, .jpeg, .pdf, .doc"> 5  <input type="file" id="image4" name="image[]" accept=".png, .jpg, .jpeg, .pdf, .doc"> 6</div>

コントローラーは、

PHP

1public function store(TaskRequest $request) 2 { 3 $task = new Task; 4 $form = $request->all(); 5 6 //画像の保存 7 if (isset($form['image'])) { 8 9 $path = $request->file('image')->store('public/image'); 10 $task->image = basename($path); 11 } else { 12 $task->image = null; 13 } 14 15 unset($form['_token']); 16 unset($form['image']); 17 18 $task->fill($form); 19 $task->user_id = $request->user()->id; 20 $task->save(); 21 $tasks = Task::orderBy('deadline', 'desc')->get(); 22 23 return redirect('user/tasks'); 24 25 }

となっております。

※追記
画像の保存が3枚中の3枚目しかできていないようです。
どこを修正すれば良いでしょうか?
下記dd()をした箇所とその結果です。
テーブル情報も記載いたします。

PHP

1public function store(TaskRequest $request) 2 { 3 // taskをデータベースに保存 4 $task = new Task; 5 $form = $request->except(["image", "_token"]); 6 $task->fill($form); 7 $task->user_id = $request->user()->id; 8 $task->save(); 9 $tasks = Task::orderBy('deadline', 'desc')->get(); 10 11 12 //画像の保存 13 $image = new Image; 14 $files = $request->file('image'); 15 16 dd($files); 17 18 foreach($files as $file){ 19 $image->name = $file->getClientOriginalName(); 20 $file->store('public/image'); 21 //ファイルのパスの名前の保存 22 // $image->name = basename($image); 23 $image->task_id = $task->id; 24 25 $image->save(); 26 27 } 28 // dd($image); 29 30 return redirect('user/tasks/'); 31 32 //select * from taskmanagement.tasks; 33 34 }

dd()

1array:3 [▼ 2 0 => Illuminate\Http\UploadedFile {#1402 ▼ 3 -test: false 4 -originalName: "456013_s.jpg" 5 -mimeType: "image/jpeg" 6 -error: 0 7 #hashName: null 8 path: "/tmp" 9 filename: "php60mWyv" 10 basename: "php60mWyv" 11 pathname: "/tmp/php60mWyv" 12 extension: "" 13 realPath: "/tmp/php60mWyv" 14 aTime: 2022-02-04 09:49:01 15 mTime: 2022-02-04 09:49:01 16 cTime: 2022-02-04 09:49:01 17 inode: 262491 18 size: 199954 19 perms: 0100600 20 owner: 501 21 group: 501 22 type: "file" 23 writable: true 24 readable: true 25 executable: false 26 file: true 27 dir: false 28 link: false 29 } 30 1 => Illuminate\Http\UploadedFile {#1401 ▼ 31 -test: false 32 -originalName: "3055088_s.jpg" 33 -mimeType: "image/jpeg" 34 -error: 0 35 #hashName: null 36 path: "/tmp" 37 filename: "php8tc8sS" 38 basename: "php8tc8sS" 39 pathname: "/tmp/php8tc8sS" 40 extension: "" 41 realPath: "/tmp/php8tc8sS" 42 aTime: 2022-02-04 09:49:01 43 mTime: 2022-02-04 09:49:01 44 cTime: 2022-02-04 09:49:01 45 inode: 262499 46 size: 301046 47 perms: 0100600 48 owner: 501 49 group: 501 50 type: "file" 51 writable: true 52 readable: true 53 executable: false 54 file: true 55 dir: false 56 link: false 57 } 58 2 => Illuminate\Http\UploadedFile {#1400 ▼ 59 -test: false 60 -originalName: "22898799_s.jpg" 61 -mimeType: "image/jpeg" 62 -error: 0 63 #hashName: null 64 path: "/tmp" 65 filename: "phpAGEnnf" 66 basename: "phpAGEnnf" 67 pathname: "/tmp/phpAGEnnf" 68 extension: "" 69 realPath: "/tmp/phpAGEnnf" 70 aTime: 2022-02-04 09:49:01 71 mTime: 2022-02-04 09:49:01 72 cTime: 2022-02-04 09:49:01 73 inode: 262503 74 size: 367696 75 perms: 0100600 76 owner: 501 77 group: 501 78 type: "file" 79 writable: true 80 readable: true 81 executable: false 82 file: true 83 dir: false 84 link: false 85 } 86]

PHP

1public function store(TaskRequest $request) 2 { 3 // taskをデータベースに保存 4 $task = new Task; 5 $form = $request->except(["image", "_token"]); 6 $task->fill($form); 7 $task->user_id = $request->user()->id; 8 $task->save(); 9 $tasks = Task::orderBy('deadline', 'desc')->get(); 10 11 12 //画像の保存 13 $image = new Image; 14 $files = $request->file('image'); 15 16 // dd($files); 17 18 foreach($files as $file){ 19 $image->name = $file->getClientOriginalName(); 20 $file->store('public/image'); 21 //ファイルのパスの名前の保存 22 // $image->name = basename($image); 23 $image->task_id = $task->id; 24 25 $image->save(); 26 27 } 28 dd($image); 29 30 return redirect('user/tasks/'); 31 32 //select * from taskmanagement.tasks; 33 34 }

dd()

1App\Models\Image {#1398 ▼ 2 #connection: "mysql" 3 #table: null 4 #primaryKey: "id" 5 #keyType: "int" 6 +incrementing: true 7 #with: [] 8 #withCount: [] 9 #perPage: 15 10 +exists: true 11 +wasRecentlyCreated: true 12 #attributes: array:5 [▼ 13 "name" => "22898799_s.jpg" 14 "task_id" => 96 15 "updated_at" => "2022-02-04 09:50:29" 16 "created_at" => "2022-02-04 09:50:29" 17 "id" => 18 18 ] 19 #original: array:5 [▼ 20 "name" => "22898799_s.jpg" 21 "task_id" => 96 22 "updated_at" => "2022-02-04 09:50:29" 23 "created_at" => "2022-02-04 09:50:29" 24 "id" => 18 25 ] 26 #changes: array:1 [▼ 27 "name" => "22898799_s.jpg" 28 ] 29 #casts: [] 30 #classCastCache: [] 31 #dates: [] 32 #dateFormat: null 33 #appends: [] 34 #dispatchesEvents: [] 35 #observables: [] 36 #relations: [] 37 #touches: [] 38 +timestamps: true 39 #hidden: [] 40 #visible: [] 41 #fillable: [] 42 #guarded: array:1 [▼ 43 0 => "*" 44 ] 45}

テーブル情報

アドバイスの程どうかよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/02/02 23:04

$form['image']をdd()した結果を提示してください。 あと、multipleなら実装できたのでしょうか?構成的には変わらないと思うのですが
yoyoyo

yoyoyo

2022/02/03 00:33

下記、 public function store(TaskRequest $request) { $task = new Task; $form = $request->all(); dd($form['image']); でdd()した内容となります。 multipleの方はbladeを確認した段階で、複数枚追記できるかが少し分かりにくいなと感じたため コントローラの記述前にinputでの実装にしようかと考えたので実装までは出来ていません。 array:2 [▼ 0 => Illuminate\Http\UploadedFile {#1401 ▼ -test: false -originalName: "456013_s.jpg" -mimeType: "image/jpeg" -error: 0 #hashName: null path: "/tmp" filename: "phpkBWjez" basename: "phpkBWjez" pathname: "/tmp/phpkBWjez" extension: "" realPath: "/tmp/phpkBWjez" aTime: 2022-02-03 09:25:26 mTime: 2022-02-03 09:25:26 cTime: 2022-02-03 09:25:26 inode: 262495 size: 199954 perms: 0100600 owner: 501 group: 501 type: "file" writable: true readable: true executable: false file: true dir: false link: false } 1 => Illuminate\Http\UploadedFile {#1400 ▼ -test: false -originalName: "3055088_s.jpg" -mimeType: "image/jpeg" -error: 0 #hashName: null path: "/tmp" filename: "php0gaYV8" basename: "php0gaYV8" pathname: "/tmp/php0gaYV8" extension: "" realPath: "/tmp/php0gaYV8" aTime: 2022-02-03 09:25:26 mTime: 2022-02-03 09:25:26 cTime: 2022-02-03 09:25:26 inode: 262500 size: 301046 perms: 0100600 owner: 501 group: 501 type: "file" writable: true readable: true executable: false file: true dir: false link: false } ]
m.ts10806

2022/02/03 00:52

こちらも想定通りの形で、arrayできてるのでループさせて一つ一つ処理するだけかと。 テーブル構成がどうなってるのか提示されてないので、どういう形でDBに保持したいかで決めてください
yoyoyo

yoyoyo

2022/02/03 14:55 編集

テーブル構成は、 https://gyazo.com/ec53103b51b18134e144d3457fbe8347 https://gyazo.com/49048686e707014ead7ea1a97a498ed7 となっています。 下記のようにやってみたのですが、 save()に確認すると3枚目の最後のデータしか保存ができていないようでした https://gyazo.com/968327a24308c9e195709b3a3571df36 https://gyazo.com/b5029bad5cfab29b92e1463c2015011f save後 https://gyazo.com/c0404624573874c29ddcbc2f26101f07 https://gyazo.com/55b2dbebafe39fdae630217cd0849803 どこを修正すれば良いかアドバイス頂けますでしょうか?
m.ts10806

2022/02/03 22:49

えっと、質問本文編集して追記してください。 画像でしたらteratailの投稿に画像添付機能があります(コメントでは出来ません) あまり外部サービスじゃない方が良いです。 そのサービスが何かで使えないときに参照できませんから。
guest

回答1

0

自己解決

foreach内にてインスタンス化を行うことにより解決いたしました。
アドバイスありがとうございます。

PHP

1$files = $request->file('image'); 2 3 // dd($files); 4 5 foreach($files as $file){ 6 $image = new Image; 7 $image->name = $file->getClientOriginalName(); 8 $file->store('public/image'); 9 $image->task_id = $task->id; 10 11 $image->save(); 12 13 }

投稿2022/02/04 04:45

yoyoyo

yoyoyo

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問