検索

ホームページ  >  に質問  >  本文

Laravelデータベース操作での誤ったデータ更新

<p>以下は我モデル中の関数数代コード:</p> <pre class="brush:php;toolbar:false;">パブリック関数 updateAnime(Request $request) { $updatedFields = []; $request->validate([ 'タイトル' => ['必須']、 'リリース日' => ['必須', '整数'], '著者' => ['必須']、 'スタジオ' => ['必須']、 '説明' => ['必須']、 ]); $request->リリース日 = (int)$request->リリース日; $animeInfo = Anime::where('title', $request->oldTitle)->with('authors', 'studios')->first(); $author = 著者::firstOrCreate(['author' => $request->author]); 著者アニメ::どこ([ ['作者', $animeInfo->authors[0]->author], ['アニメ', $request->oldTitle] ])->update([ '著者' => $author->著者、 'アニメ' => str_replace(' ', '-', $request->title) ]); $studio = Studio::firstOrCreate(['studio_name' => $request->studio]); スタジオアニメ::どこ([ ['スタジオ', $animeInfo->studios[0]->studio_name], ['アニメ', $request->oldTitle] ])->update([ 'スタジオ' => $スタジオ->スタジオ名, 'アニメ' => str_replace(' ', '-', $request->title) ]); foreach ($request->all() as $key =>$value) { if (property_exists($animeInfo, $key)) { if ($request->$key != $animeInfo->$key) { $updatedFields[$key] = $request->$key; } } } $animeInfo->update($updatedFields); return response()->json(['message' => 'データは正常に更新されました。n 更新されたデータ: ' . implode(', ', array_keys($updatedFields))]); }</pre> <p>制御制器代码:</p> <pre class="brush:php;toolbar:false;">$anime = new Anime(); return $anime->updateAnime($request);</pre> <p>問題は、関連する表スタジオアニメとオーサーアニメは更新されますが、表スタジオとアニメーションでは新しいデータが作成されますが、アニメーションは更新されないことです。皆さん、なぜこれが起こっているのか、そしてその解決方法<br /><br />前のコードで、変更を確認せずにデータを更新しただけでは、すべてうまくいきました</p><p>< br />

<pre class="brush:php;toolbar:false;">$animeInfo->update([ 'title' => str_replace(' ', '-',$request->title), 'ポスター' => $animeInfo->ポスター, '説明' => $request-> 説明, 'リリース日' => $request->リリース日, '予告編' => $animeInfo-> 予告編, ]); return response()->json(['message' => 'データは正常に更新されました']);```</pre> <p><br /></p>
P粉336536706P粉336536706508日前488

全員に返信(1)返信します

  • P粉533898694

    P粉5338986942023-08-08 10:17:57

    これらのプロパティは Model オブジェクトのプロパティとして直接アクセスできないため、property_exist() 関数を使用して列名を取得することはできません。

    これを確認するには、tinker:


    を試してください。 リーリー

    私の提案は、attributesarray() または getAttributes() メソッドを array_keys() と組み合わせて使用​​し、モデルの属性名の配列を取得することです。 リーリー

    返事
    0
  • キャンセル返事