cari

Rumah  >  Soal Jawab  >  teks badan

Kemas kini data yang salah dalam operasi pangkalan data Laravel

<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>
P粉336536706P粉336536706474 hari yang lalu463

membalas semua(1)saya akan balas

  • P粉533898694

    P粉5338986942023-08-08 10:17:57

    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:


    dd(User::first())

    Cadangan saya ialah menggunakan kaedah attributesarray() atau getAttributes() digabungkan dengan array_keys() untuk mendapatkan tatasusunan nama atribut model. Bukankah itu sudah selesai?:

    $animeAttributes = array_keys($animeInfo->getAttributes());
    
    foreach ($request->all() as $key => $value) {
    
        if (in_array($key, $animeAttributes)) {
    
        /* ... */

    balas
    0
  • Batalbalas