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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Laravel

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1578閲覧

データベースに画像へのパスを保存したいがパスが作れない。(laravel, vue.js)画像複数枚投稿

tenlife

総合スコア70

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Laravel

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/07/09 08:12

編集2020/07/09 08:13

laravelとvueを使用して画像複数枚投稿を実装しています。

解決したいこと
データベースに保存するのは画像へのパスにしたい。(現状は画像本体が保存されます)

下記の様な形でstoreを実行したいのですが、下記がうまくいきません。
$path = $image->store('public');
$imageの値がおかしいと予想しています。

public function create(CreateMe $request) { dd(request()->all()); $user = Auth::user(); $me = new Me(); $me->user_id = $user->id; $me->content = $request->content; $lists = explode(',', $request->images); $me->save(); $image_list = []; foreach ($lists as $image) { $img = new Image(); // $path = $image->store('public'); ここがうまく実行されない $read_temp_path = str_replace('public/', 'storage/', $image); <-ほんとは$pathにしたい $img->src = $read_temp_path; array_push($image_list, $img); } $me->images()->saveMany($image_list); return redirect()->route('post_index'); }
$request->imagesの中身(vueから送られてきます) $request->images => "5e0bf*.jpg,69CA5A*.JPG" ここからexplodeで分けて処理してます。 なのでforeachでの$imageの値は下記の形(ファイル名)になっています。 5e0bf*.jpg $path = $image->store('public');だと message: "Call to a member function store() on string"が表示されてしまいます。おそらくobjectが求められているのだと思います。

$path = $image->store('public');
現状では上記の様な形で$pathを作成できる様にしたいのですが,$imageがstringと言われてしまっています。ファイル名が直接入っているのがよくなさそうです。

storeを実行するにはどの様な処理を書けば良いでしょうか?
もしくはそもそも$request->imagesの中身だとstoreは出来ないと言うことなのでしょうか?

どなたか知恵をお貸ししていただきたいです。
よろしくお願いします。

laravel6.18
vue.js 2.6.11

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

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

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

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

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

guest

回答2

0

送信側がどうなっているのか、分からないですが…

javascript

1formData.append('images[]', images); //imagesにファイルが配列で格納されている 2axios.post('/upload', formData)

php

1$me = new Me(); 2 3$file_path = []; 4$dir_name = 'hoge'; 5if($request->has('images')) { 6 foreach ($request->images as $image) { 7 $image->store($dir_name); //画像がstorage/app/hogeフォルダに保存される 8 $file_path[] = $dir_name.'/'.$image->getClientOriginalName(); 9 } 10} 11 12/* Meテーブルのパスを保存するカラムが分かりませんので仮にfilepathとします */ 13$me->filepath = serialize($file_path); 14$me->save();

投稿2020/07/09 14:43

yuki84web

総合スコア1857

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

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

tenlife

2020/07/09 21:51

回答ありがとうございます。 こちらを参考に試したところ、送信側に問題があることがわかりそちらを修正することによって解決に至りました。 やはり、おっしゃられていた送信側でした。。 ありがとうございました!
guest

0

自己解決

現状の理解では、storeを使用するときはfile自体の情報が必要みたいです。
今回自分はfile名だけを受信していたのでうまく処理が走っていませんでした。

送信側でfile自体を配列の形で送ることによって解決することができました。

https://readouble.com/laravel/6.x/ja/filesystem.html

ここで、file objectが必要みたいなことを言っていたので参考にしました。
https://stackoverflow.com/questions/43930518/call-to-a-member-function-getclientoriginalextension-on-string

投稿2020/07/09 21:55

tenlife

総合スコア70

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問