<p>以下是我模型中的函數程式碼:</p>
public function updateAnime(Request $request)
{
$updatedFields = [];
$請求->驗證([
'標題' => ['必需的'],
'發布日期' => ['必需', '整數'],
'作者' => ['必需的'],
'工作室' => ['必需的'],
'描述' => ['必需的'],
]);
$request->release_date = (int)$request->release_date;
$animeInfo = Anime::where('title', $request->oldTitle)->with('authors', 'studios')->first();
$author = Author::firstOrCreate(['author' => $request->author]);
作者動漫::哪裡([
['作者', $animeInfo->authors[0]->author],
['動漫', $request->oldTitle]
])->更新([
'作者' => $作者->作者,
'動漫' => str_replace(' ', '-', $request->標題)
]);
$studio = Studio::firstOrCreate(['studio_name' => $request->studio]);
工作室動漫::哪裡([
['工作室', $animeInfo->studios[0]->studio_name],
['動漫', $request->oldTitle]
])->更新([
'工作室' => $studio->studio_name,
'動漫' => str_replace(' ', '-', $request->標題)
]);
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>
$anime = new Anime();
返回$anime->updateAnime($request);</pre>
<p>問題是,它更新相關的表StudioAnime和AuthorAnime,它也在表Studio和動畫中創建新的數據,但它不會更新表動漫。兄弟們,為啥這樣,該怎麼解決<br /><br />當在我以前的代碼我只是更新數據沒有檢查它的變化都工作</p><p>< br /></p>
<pre class="brush:php;toolbar:false;">$animeInfo->update([
'title' => str_replace(' ', '-',$request->title),
'poster' => $animeInfo->poster,
'description' => $request->description,
'release_date' => $request->release_date,
'trailer' => $animeInfo->trailer,
]);
return response()->json(['message' => 'Data was updated successuflly']);```</pre>
<p><br /></p>
不能用property_exist()函數取得列名,因為這些屬性不能直接作為Model物件中的屬性存取。
要檢查這個,試試在tinker:
我的建議是,用attributesarray()或getAttributes()方法與array_keys()結合,得到模型的屬性名稱數組,這不就搞定了嗎: