Laravelデータベース操作での誤ったデータ更新
P粉336536706
2023-08-07 20:33:01
<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>
これらのプロパティは Model オブジェクトのプロパティとして直接アクセスできないため、property_exist() 関数を使用して列名を取得することはできません。
これを確認するには、tinker:
を試してください。 リーリー私の提案は、attributesarray() または getAttributes() メソッドを array_keys() と組み合わせて使用し、モデルの属性名の配列を取得することです。 リーリー