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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

Q&A

解決済

1回答

593閲覧

LaravelでMySQLに接続してデータ更新できない

yren

総合スコア5

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

0グッド

0クリップ

投稿2021/10/25 07:52

編集2021/10/26 02:57

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

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

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

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

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

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

AbeTakashi

2021/10/25 16:21

関連してるデータベースのテーブル定義やModelのソースコードなどはすべて質問文に入れておいた方が良いと思います。現状の情報だけだと、ちょっと情報不足で回答がでてこないかも。
yren

2021/10/26 02:59

ありがとうございます! アドバイス通りソースコードを追加してみました。
guest

回答1

0

自己解決

該当コードの$item->item->finished = $item_id;を$item->item->update(['finished' => $item_id]);という風にupdateを用いたら変更することが出来ました。

投稿2021/10/26 10:21

yren

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問