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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Laravel 5

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

Q&A

解決済

2回答

13868閲覧

laravel5.1 updateでsaveできない

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Laravel 5

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

0グッド

1クリップ

投稿2016/10/12 04:27

DBをupdateする処理を書いているのですが、最後のsaveのところでなぜか失敗します。

$test = Test::where('login_id','=',$id)->get(); $test->memo = $memo; $test->save();

この処理を行うと

Method save does not exist.

と出てきてしまいます。ルートもpatchで登録していますし、データを送信するときにも

<input type="hidden" name="_method" value="PATCH">

と送っているので大丈夫だと思っていたのですが・・・。一体何が原因なんでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

get()はデフォルトでは結果が1件の場合でも「配列」を返します。get()をつかう場合はこのようになります。

php

1$tests = Test::where('login_id', $id)->get(); 2foreach($tests as $test) { 3 $test->memo = $memo; 4 $test->save(); 5}

結果が1件だと分かりきっている場合はfirst()を使いましょう。

php

1$test = Test::where('login_id', $id)->first(); 2$test->memo = $memo; 3$test->save();

もしくはこのようにupdate()メソッドを使っても良いかもしれません。

php

1Test::where('login_id', $id)->update(['memo' => $memo]);

投稿2016/10/12 05:18

編集2016/10/12 05:24
natady

総合スコア606

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

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

退会済みユーザー

退会済みユーザー

2016/10/12 05:49 編集

本当助かりました。配列に対してだとsaveメゾットはうまく起動しないんですかね?2つ目の方法も試したのですが、なぜか最終的なsqlが `test` set `memo` = aiueo where `id` is null となってしまい、エラーになってしまいました。modelの方で主キーはやはり登録するべきなのかもしれませんね。一番最後の方法はうまくいきました。
natady

2016/10/12 05:57

>配列に対してだとsaveメゾットはうまく起動しないんですかね? → やっていることは$array = []; $array->save(); みたいなものなので、正常に動作しません。 >エラーになってしまいました。 → エラーはどんなエラーが吐かれていましたか?
退会済みユーザー

退会済みユーザー

2016/10/12 06:02

2つ目の方法でupdateしようとすると、最終的なsql文が `test` set `memo` = aiueo where `id` is null となって主キーが空じゃないやつをupdateするという条件を勝手につけるシステムみたいです。なのでmodelの方で主キーを登録したらエラーになりませんでした。わざわざありがとうございます!
guest

0

Method save does not exist.

エラーメッセージに書いてあるとおり、としか言いようがありませんが…
「saveメソッドが存在しない」と言われているので、$testの参照しているオブジェクトがsave()メソッドを持っているか確認してください。

例):Test::Where()で想定と違うクラスのインスタンスが返っている、save()メソッドの定義で綴りを間違えている、継承しているクラスがsave()を持っていると思ったら持っていなかった、等

投稿2016/10/12 05:09

KaedeKazane

総合スコア408

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問