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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

2770閲覧

Laravel:画像投稿時の名称が変更してしまう

ink88882

総合スコア24

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/07/20 16:55

お世話になっております。

Laravel Framework 5.8.28
php バージョン PHP 7.3.6

laravelでフォームでpost時、画像投稿を行い、DBにimage_urlというファイル名でインサート登録しています。
そのデータの名称が、意図と違うものになってしまい、
表示ページでそのデータの取得する際に、取得する方法がわかりません。

ーーーーーーーーコードは以下のものです。ーーーーーーーーー

フォーム画面表示。
image_urlという名称で登録しています。
createアクションにpostしています。

php

1 2<form method="POST" action="{{ route('posts.create')}}" class="justify-content-center" enctype="multipart/form-data" > 3 {{ csrf_field() }} 4 5-- 6 7<!--画像投稿--> 8 <div class="form-group"> 9 画像投稿 10 <div class="form-image_url"> 11 <input type="file" name="image_url"> 12 </div> 13 </div> 14 15 <button type="submit" class="btn btn-primary"> 16 {{__('Post')}} 17 </button> 18</form> 19

postコントローラー。PostsController.phpという名称です。

php

1 2namespace App\Http\Controllers; 3 4use Illuminate\Http\Request; 5use Illuminate\Support\Facades\Auth; 6use App\Post; 7 8 public function create(Request $request) 9 { 10 $post = new Post; 11 $time = date("YmdHis"); 12//画像名を「投稿日時_投稿ユーザーid.jpg」という名称で登録するため、 13//storeAsで登録。 14 $post->image_url = $request->image_url->storeAs('public/post_images', $time.'_'.Auth::user()->id.'.jpg'); 15 16 Auth::user()->posts()->save($post->fill($request->all())); 17 18 return redirect('/')->with('flash_message',__('Registered.')); 19 } 20} 21

上記のコードで、意図通り画像はstorageの中のapp/public/post_imagesの中に保管されます。(シンボリックリンクは設定済み)
例:20190720164627_2.jpg

ですが、DB側にはこの画像が下記のような名称で登録されます。
/private/var/folders/pv/zjg0833j4mn5hrrv6mz7z5sm0000gn/T/phpy1QVbp

イメージ説明

この場合、DB側の画像名も任意でコントロールしたいです。
※ここでDB側のimage_urlに設定されたパスの名前と、実際の画像の名称が一緒ではないと、
別ページでDBからimage_urlを取得して表示画面側で画像のデータが取得できないという認識です。

お手数ですが、何とぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

postにfillする時に上書きしてしまっているのでは?
image_urlをfillableから外すか
$request->all()ではなく$request->except(['image_url'])を使ってimage_urlを除外してみるとかでどうですかね

投稿2019/07/20 17:01

編集2019/07/20 19:10
mikkame

総合スコア5036

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

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

ink88882

2019/07/21 04:20

迅速な回答、ありがとうございます! まさしくallで上書きされていたようです。 下記のように修正し、意図した画像名で登録できました。 $post->image_url = $request->image_url->storeAs('public/post_images', $time.'_'.Auth::user()->id.'.jpg'); $post->title = $request->title; $post->content = $request->content; $post->category_id = $request->category_id; Auth::user()->posts()->save($post);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問