以下は我モデル中の関数数代コード:
パブリック関数 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))]); }
制御制器代码:
$anime = new Anime(); return $anime->updateAnime($request);
問題は、関連する表スタジオアニメとオーサーアニメは更新されますが、表スタジオとアニメーションでは新しいデータが作成されますが、アニメーションは更新されないことです。皆さん、なぜこれが起こっているのか、そしてその解決方法
前のコードで、変更を確認せずにデータを更新しただけでは、すべてうまくいきました
< br />
$animeInfo->update([ 'title' => str_replace(' ', '-',$request->title), 'ポスター' => $animeInfo->ポスター, '説明' => $request-> 説明, 'リリース日' => $request->リリース日, '予告編' => $animeInfo-> 予告編, ]); return response()->json(['message' => 'データは正常に更新されました']);```
これらのプロパティは Model オブジェクトのプロパティとして直接アクセスできないため、property_exist() 関数を使用して列名を取得することはできません。
これを確認するには、tinker:
を試してください。 リーリー私の提案は、attributesarray() または getAttributes() メソッドを array_keys() と組み合わせて使用し、モデルの属性名の配列を取得することです。 リーリー