Kemas kini data yang salah dalam operasi pangkalan data Laravel
P粉336536706
2023-08-07 20:33:01
<p>以下是我模型中的函数代码:</p>
<pre class="brush:php;toolbar:false;">public function updateAnime(Minta $request)
{
$updatedFields = [];
$request->validate([
'tajuk' => ['diperlukan'],
'release_date' => ['diperlukan', 'integer'],
'pengarang' => ['diperlukan'],
'studio' => ['diperlukan'],
'penerangan' => ['diperlukan'],
]);
$request->release_date = (int)$request->release_date;
$animeInfo = Anime::where('title', $request->oldTitle)->with('authors', 'studios')->first();
$author = Author::firstOrCreate(['author' => $request->author]);
PengarangAnime::di mana([
['author', $animeInfo->authors[0]->author],
['anime', $request->oldTitle]
])->kemas kini([
'pengarang' => $author->author,
'anime' => str_replace(' ', '-', $request->tajuk)
]);
$studio = Studio::firstOrCreate(['studio_name' => $request->studio]);
StudioAnime::di mana([
['studio', $animeInfo->studios[0]->studio_name],
['anime', $request->oldTitle]
])->kemas kini([
'studio' => $studio->studio_name,
'anime' => str_replace(' ', '-', $request->tajuk)
]);
foreach ($request->all() sebagai $key => $value) {
if (property_exists($animeInfo, $key)) {
if ($request->$key != $animeInfo->$key) {
$updatedFields[$key] = $request->$key;
}
}
}
$animeInfo->update($updatedFields);
return response()->json(['message' => 'Data telah berjaya dikemas kini. n Data dikemas kini: ' . implode(', ', array_keys($updatedFields))]);
}</pre>
<p>控制器代码:</p>
<pre class="brush:php;toolbar:false;">$anime = new Anime();
kembalikan $anime->updateAnime($request);</pre>
<p>问题是,它更新相关的表StudioAnime和AuthorAnime,它也在表Studio和动漫中创建新的数据,中新数据。Kawan-kawan, kenapa ini berlaku dan bagaimana untuk menyelesaikannya<br /><br />Apabila dalam kod saya sebelum ini, saya baru sahaja mengemas kini data tanpa menyemak perubahannya, semuanya berfungsi<p>< /></p>
<pre class="brush:php;toolbar:false;">$animeInfo->update([
'title' => str_replace(' ', '-',$request->title),
'poster' => $animeInfo->poster,
'keterangan' => $permintaan->keterangan,
'release_date' => $request->release_date,
'treler' => $animeInfo->treler,
]);
return response()->json(['message' => 'Data telah dikemas kini dengan jayanya']);```</pre>
<p><br /></p>
Anda tidak boleh menggunakan fungsi property_exist() untuk mendapatkan nama lajur kerana sifat ini tidak boleh diakses terus sebagai sifat dalam objek Model.
Untuk menyemak ini, cuba di tinker:
Cadangan saya ialah menggunakan kaedah attributesarray() atau getAttributes() digabungkan dengan array_keys() untuk mendapatkan tatasusunan nama atribut model. Bukankah itu sudah selesai?: