在Laravel的数据库操作错误的数据更新
P粉336536706
P粉336536706 2023-08-07 20:33:01
[PHP讨论组]
<p>以下是我模型中的函数代码:</p> <pre class="brush:php;toolbar:false;">public function updateAnime(Request $request) { $updatedFields = []; $request-&gt;validate([ 'title' =&gt; ['required'], 'release_date' =&gt; ['required', 'integer'], 'author' =&gt; ['required'], 'studio' =&gt; ['required'], 'description' =&gt; ['required'], ]); $request-&gt;release_date = (int)$request-&gt;release_date; $animeInfo = Anime::where('title', $request-&gt;oldTitle)-&gt;with('authors', 'studios')-&gt;first(); $author = Author::firstOrCreate(['author' =&gt; $request-&gt;author]); AuthorAnime::where([ ['author', $animeInfo-&gt;authors[0]-&gt;author], ['anime', $request-&gt;oldTitle] ])-&gt;update([ 'author' =&gt; $author-&gt;author, 'anime' =&gt; str_replace(' ', '-', $request-&gt;title) ]); $studio = Studio::firstOrCreate(['studio_name' =&gt; $request-&gt;studio]); StudioAnime::where([ ['studio', $animeInfo-&gt;studios[0]-&gt;studio_name], ['anime', $request-&gt;oldTitle] ])-&gt;update([ 'studio' =&gt; $studio-&gt;studio_name, 'anime' =&gt; str_replace(' ', '-', $request-&gt;title) ]); foreach ($request-&gt;all() as $key =&gt; $value) { if (property_exists($animeInfo, $key)) { if ($request-&gt;$key != $animeInfo-&gt;$key) { $updatedFields[$key] = $request-&gt;$key; } } } $animeInfo-&gt;update($updatedFields); return response()-&gt;json(['message' =&gt; 'Data was updated successfully. n Updated data: ' . implode(', ', array_keys($updatedFields))]); }</pre> <p>控制器代码:</p> <pre class="brush:php;toolbar:false;">$anime = new Anime(); return $anime-&gt;updateAnime($request);</pre> <p>问题是,它更新相关的表StudioAnime和AuthorAnime,它也在表Studio和动漫中创建新的数据,但它不更新表动漫。兄弟们,为啥这样,该怎么解决<br /><br />当在我以前的代码我只是更新数据没有检查它的变化都工作</p><p><br /></p> <pre class="brush:php;toolbar:false;">$animeInfo-&gt;update([ 'title' =&gt; str_replace(' ', '-',$request-&gt;title), 'poster' =&gt; $animeInfo-&gt;poster, 'description' =&gt; $request-&gt;description, 'release_date' =&gt; $request-&gt;release_date, 'trailer' =&gt; $animeInfo-&gt;trailer, ]); return response()-&gt;json(['message' =&gt; 'Data was updated successuflly']);```</pre> <p><br /></p>
P粉336536706
P粉336536706

全部回复(1)
P粉533898694

不能用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)) {

    /* ... */
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号