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>
P粉5338986942023-08-08 10:17:57
不能用property_exist()函数获取列名,因为这些属性不能作为Model对象中的属性直接访问。
要检查这个,试试在tinker:
dd(User::first())
我的建议是,用attributesarray()或getAttributes()方法与array_keys()结合,获得模型的属性名称数组,这不就搞定了吗:
$animeAttributes = array_keys($animeInfo->getAttributes()); foreach ($request->all() as $key => $value) { if (in_array($key, $animeAttributes)) { /* ... */