首页 > 社区问答列表 >在Laravel的数据库操作错误的数据更新

  在Laravel的数据库操作错误的数据更新

以下是我模型中的函数代码:

public function updateAnime(Request $request)
{
    $updatedFields = [];

    $request->validate([
        'title' => ['required'],
        'release_date' => ['required', 'integer'],
        'author' => ['required'],
        'studio' => ['required'],
        'description' => ['required'],
    ]);

    $request->release_date = (int)$request->release_date;
    $animeInfo = Anime::where('title', $request->oldTitle)->with('authors', 'studios')->first();

    $author = Author::firstOrCreate(['author' => $request->author]);
    AuthorAnime::where([
        ['author', $animeInfo->authors[0]->author],
        ['anime', $request->oldTitle]
    ])->update([
        'author' => $author->author,
        'anime' => str_replace(' ', '-', $request->title)
    ]);

    $studio = Studio::firstOrCreate(['studio_name' => $request->studio]);
    StudioAnime::where([
        ['studio', $animeInfo->studios[0]->studio_name],
        ['anime', $request->oldTitle]
    ])->update([
        'studio' => $studio->studio_name,
        'anime' => 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' => 'Data was updated successfully. n Updated data: ' . implode(', ', array_keys($updatedFields))]);
}

控制器代码:

$anime = new Anime();
        return $anime->updateAnime($request);

问题是,它更新相关的表StudioAnime和AuthorAnime,它也在表Studio和动漫中创建新的数据,但它不更新表动漫。兄弟们,为啥这样,该怎么解决

当在我以前的代码我只是更新数据没有检查它的变化都工作


$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']);```


P粉336536706
P粉336536706

  • P粉533898694
  • P粉533898694   已被采纳   2023-08-08 10:17:57 1楼

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

    +0 添加回复