LaravelでMySQLに接続してデータを更新したいのですが、
思うようにできません。
エラーは出ていないので直接的な原因がどこかもよく分かりません。
Modelのfillableでもカラム名を指定しているので、
updateが出来ないわけではありません。
実現したいこと
クライアントサイド(Vue)から送られてきたidより
それに該当するデータを取得する。
その取得したデータのItemテーブルのidを使って、
Itemテーブルのnegotiationカラムを更新したい。
該当のソースコード
php
1//ItemController.php 2 3use App\Models\Item; 4 5public function exchanged(string $id) { 6 //交換するために交渉に出した商品 7 $item = Photo::with(['item', 'user'])->where('id', $id)->first(); 8 $item_id = $item->item->id; 9 //交換したい商品 10 $negotiation_id = $item->item->negotiation; 11 $negotiation_item = Item::with(['user'])->where('id', $negotiation_id)->first(); 12 $trade1 = new Trade; 13 $trade1->fill([ 14 'user_id' => $item->user->id, 'item_id' => $item_id, 'address' => $negotiation_item->user->address, 'limit_time' => Carbon::now()->addDay(7) 15 ])->save(); 16 $trade2 = new Trade; 17 $trade2->fill([ 18 'user_id' => $negotiation_item->user->id, 'item_id' => $negotiation_item->id, 'address' => $item->user->address, 'limit_time' => Carbon::now()->addDay(7) 19 ])->save(); 20 21 $negotiation_item->finished = $item_id; 22 $negotiation_item->save(); 23 $item->item->finished = $item_id; //この部分が機能していない 24 $item->save(); 25 26 return response()->json(['status' => 'success'], 200); 27 }
php
1//app/Models/Item.php 2 3class Item extends Model 4{ 5 use SoftDeletes; 6 7 protected $fillable = [ 8 'name', 'description', 'genre', 'what_you_want', 'quality', 'post_day', 'negotiation', 'finished' 9 ]; 10 11 protected $hidden = [ 12 self::CREATED_AT, self::UPDATED_AT 13 ]; 14 15 16 public function user() { 17 return $this->belongsTo(User::class); 18 } 19 20 public function chats() { 21 return $this->hasMany(Chat::class); 22 } 23 24 public function trade() { 25 return $this->hasOne(Trade::class); 26 } 27 28 public function photos() { 29 return $this->hasMany(Photo::class); 30 } 31}
php
1//create_items_tables.php 2 3class CreateItemsTable extends Migration 4{ 5 /** 6 * Run the migrations. 7 * 8 * @return void 9 */ 10 public function up() 11 { 12 Schema::create('items', function (Blueprint $table) { 13 $table->bigIncrements('id'); 14 $table->string('name', 20)->nullable(); 15 $table->string('genre')->nullable(); 16 $table->string('quality')->nullable(); 17 $table->string('post_day')->nullable(); 18 $table->string('what_you_want')->nullable(); 19 $table->string('description')->nullable(); 20 $table->integer('negotiation')->default(0); 21 $table->integer('finished')->default(0); 22 $table->softDeletes(); 23 $table->timestamps(); 24 25 $table->foreignId('user_id') 26 ->constrained() 27 ->onDelete('cascade') 28 ->onUpdate('cascade'); 29 30 }); 31 }
試したこと
$item_idの部分を$item->item->idなど別の書き方で書いてみましたが結果は変わりませんでした。
ちなみに機能していないコードの2行上のコードは同じ表記にもかかわらず、
データはしっかりと更新されています。
補足情報(FW/ツールのバージョンなど)
Laravel 8.29.0
MySQL 8.0.26
回答1件
あなたの回答
tips
プレビュー