前提・実現したいこと
初投稿&初心者です。
オークションサイトを作成しています。
登録済の出品データ編集画面をLaravelで実装したいのですが更新ボタンを押すと遷移はするが更新されません。
dd($request->all())すると値はきちんと取得できている。
dd($products)も値はきちんと取得できている。
エラーメッセージが出ないので原因が分からず詰み状態です。
どうすればsave()が正常に動くのでしょうか。
該当のソースコード
####ProductsController.php(Controller)
php
1 2 //view 3 public function edit($id) 4 { 5 //出品情報 6 $products = Products::find($id); 7 //カテゴリー一覧取得 8 $categories = Categories::all(); 9 //該当カテゴリーid取得 10 $c_id = $products->categories_id; 11 //該当カテゴリー名取得 12 $c_name = $categories->where('id', $c_id); 13 //更新日時変更 14 $updated_at = now(); 15 //id 16 $id = $products->id; 17 return view('member.trade_edit', compact('products', 'categories', 'c_name','updated_at','id')); 18 } 19 20 21 public function update($id,ProductsEditRequest $request) 22 { 23 //不正遷移を防止 24 if (!ctype_digit($id)) { 25 return redirect('index')->with('flash_message', __('Invalid operation was performed.')); 26 } 27 28 //情報取得 29 $products = Products::find($id); 30 //修正実装 31 $products->fill($request->all())->save(); 32 return redirect('member/trade/list')->with('flash_message', __('Edited.')); 33 }
####Products.php(Model)
php
1namespace App\Models; 2 3use Illuminate\Database\Eloquent\Model; 4 5class Products extends Model 6{ 7 protected $table = 'products'; 8 protected $primaryKey = 'products.id'; 9 protected $fillable = [ 10 'product_name','product_describe','categories_id','trade_flag','product_image1', 11 'product_image2','product_image3','product_image4','product_image5','users_id', 12 'updated_at', 13 ]; 14 15 public function categories(){ 16 return $this->belongsTo('App\Models\Product','categories_id'); 17 } 18}
####User.php(Model)
php
1namespace App\Models; 2 3use App\Notifications\PasswordResetNotification; 4use Illuminate\Contracts\Auth\MustVerifyEmail; 5use Illuminate\Foundation\Auth\User as Authenticatable; 6use Illuminate\Notifications\Notifiable; 7use Illuminate\Database\Eloquent\SoftDeletes; 8 9class User extends Authenticatable 10{ 11 use Notifiable; 12 use SoftDeletes; 13 14 //softdelete用 15 protected $table = 'users'; 16 protected $dates = ['deleted_at']; 17 18 protected $fillable = [ 19 'name', 'email', 'password','zip','tel' 20 ]; 21 22 protected $hidden = [ 23 'password', 'remember_token', 24 ]; 25 26 protected $casts = [ 27 'email_verified_at' => 'datetime', 28 ]; 29 30 public function products(){ 31 return $this->hasMany('App\Models\Product'); 32 } 33 34 public function sendPasswordResetNotification($token) 35 { 36 $this->notify(new PasswordResetNotification($token)); 37 } 38}
####Categories.php(Model)
php
1namespace App\Models; 2use Illuminate\Database\Eloquent\Model; 3 4class Categories extends Model 5{ 6 protected $table = 'categories'; 7 protected $fillable = [ 8 'category_name', 9 ]; 10 public $primaryKey = 'categories.id'; 11 12 public function products(){ 13 return $this->hasMany('App\Models\Categories')->orderBy('id','DESC'); 14 } 15}
####trade_edit.blade.php(view)
php
1<form action="{{ route('tradeUpdate',$products->id) }}" method="POST" class="register_form"> 2 @csrf 3 <label for="product_name" class="register_label">出品タイトル(50文字以内):</label> 4 <input type="text" id="product_name" name="product_name" class="register_input @error('product_name') is-invalid @enderror" placeholder="出品タイトル" required value="{{ $products->product_name }}"> 5 @error('product_name') 6 <span class="errorMsg" role="alert"> 7 <strong>{{ $message }}</strong> 8 </span> 9 @enderror 10 11 <label for="categories_id" class="register_label">カテゴリー:</label> 12 <div class="select_color"> 13 <select name="categories_id" id="categories_id" class="register_select @error('category_id') is-invalid @enderror" required > 14 @if($c_name !== '') 15 @foreach($c_name as $member=>$index) 16 <option value="{{$index->id}}">{{ $index->category_name.' [登録上のカテゴリー]' }} </option> 17 @endforeach 18 @endif 19 <option value="0" hidden>▼選択してください</option> 20 @foreach($categories as $category) 21 <option value="{{$category->id}}">{{$category->category_name}}</option> 22 @endforeach 23 </select> 24 </div> 25 @error('categories_id') 26 <span class="errorMsg" role="alert"> 27 <strong>{{ $message }}</strong> 28 </span> 29 @enderror 30 31 <label for="product_describe" class="register_label">概要(500文字以内):</label> 32 <textarea name="product_describe" id="product_describe" class="register_textarea @error('product_describe') is-invalid @enderror" required placeholder="概要(500文字以内)">{{ $products->product_describe }}</textarea> 33 @error('product_describe') 34 <span class="errorMsg" role="alert"> 35 <strong>{{ $message }}</strong> 36 </span> 37 @enderror 38 39 <label class="register_label">画像:</label> 40 <a href="{{ route('editImage',$products->id) }}"><span class="submit_reUploads">画像を変更する</span></a> 41 42 <input type="text" name="updated_at" hidden value="{{ $updated_at }}"> 43 <input type="text" name="id" hidden value="{{ $id }}"> 44 <div class="btn_space_edit"> 45 <input type="submit" class="edit_submit" value="{{ __('Edit.') }}"> 46 <a href="{{ route('tradeRemove',$products->id) }}"><span>{{ __('Deleted.') }}</span></a> 47 </div> 48 </form>
####web.php(route)
php
1Route::group(['middleware' => 'auth'],function(){ 2 Route::get('member/trade/{id}/edit','Member\ProductsController@edit')->name('tradeEdit'); 3 Route::post('member/trade/{id}/update','Member\ProductsController@update')->name('tradeUpdate'); 4});
####ProductsEditRequest.php(FormRequest)
php
1namespace App\Http\Requests; 2 3use Illuminate\Foundation\Http\FormRequest; 4 5class ProductsEditRequest extends FormRequest 6{ 7 public function authorize() 8 { 9 return true; 10 } 11 12 public function rules() 13 { 14 return [ 15 'product_name'=> 'required | string | max:255', 16 'product_describe' => 'required | string | max:500', 17 'categories_id' => 'required | Integer | max:22', 18 ]; 19 } 20}
試したこと
- キャッシュクリア(php artisan cache:clear etc)
- テーブル作り直し(php artisan migrate:reset)
- bootstrap/cache/config.php の削除
- controller見直し
- ルーティングの見直し
- view見直し
- 他のテーブルでは編集できないのかと思い試してみたら編集できた
以上効果なし、エラーメッセージも表示されない
補足情報(FW/ツールのバージョンなど)
Laravel Framework 7.21.0
Composer version 1.10.9
php 7.2.31(cli)
MAMP利用
参考
画像は別ページで更新します
PhpStomで書いています
出品情報はproductsテーブル、カテゴリーはcategoriesテーブル、ユーザー情報はusersで管理しています。
何かヒントをいただけませんでしょうか。数日悩んで進まずお手上げです。
ちなみに最初からこの状態ではなく数日前までは問題なくsave()が動いていました。2日前くらいにproductsテーブルのtrade_flagのカラム属性をbooleanからstringに変更したりカラムを追加してからsave()ができなくなりました。(現在はtrade_flagはbooleanに戻していますが問題解消されず)なので問題があるとしたらモデルやテーブルなのかなあと思っています。
回答1件
あなたの回答
tips
プレビュー