recherche

Maison  >  Questions et réponses  >  le corps du texte

Mauvaise mise à jour des données dans le fonctionnement de la base de données Laravel

<p>以下是我模型中的函数代码 :</p> <pre class="brush:php;toolbar:false;">fonction publique updateAnime(Request $request) { $updatedFields = []; $request->valider([ 'titre' => ['requis'], 'release_date' => ['obligatoire', 'entier'], 'auteur' => ['requis'], 'studio' => ['requis'], 'description' => ['requis'], ]); $request->release_date = (int)$request->release_date; $animeInfo = Anime::where('title', $request->oldTitle)->with('authors', 'studios')->first(); $author = Author::firstOrCreate(['author' => $request->author]); AuteurAnime::où([ ['auteur', $animeInfo->auteurs[0]->auteur], ['anime', $request->oldTitle] ])->mettre à jour([ 'auteur' => $auteur->auteur, 'anime' => str_replace(' ", '-', $request->titre) ]); $studio = Studio::firstOrCreate(['studio_name' => $request->studio]); StudioAnime::où([ ['studio', $animeInfo->studios[0]->nom_studio], ['anime', $request->oldTitle] ])->mettre à jour([ 'studio' => $studio->nom_studio, 'anime' => str_replace(' ", '-', $request->titre) ]); foreach ($request->all() as $key => $value) { if (property_exists($animeInfo, $key)) { if ($request->$key != $animeInfo->$key) { $updatedFields[$key] = $request->$key; } } } $animeInfo->update($updatedFields); return réponse()->json(['message' => 'Les données ont été mises à jour avec succès. n Données mises à jour : ' . implode(', ', array_keys($updatedFields))]); }</pré> <p>控制器代码 :</p> <pre class="brush:php;toolbar:false;">$anime = new Anime(); return $anime->updateAnime($request);</pre> <p> 。Les gars, pourquoi cela se produit-il et comment le résoudre<br /><br />Quand dans mon code précédent, je viens de mettre à jour les données sans vérifier leurs modifications, tout a fonctionné</p><p>< /></p> <pre class="brush:php;toolbar:false;">$animeInfo->update([ 'titre' => str_replace(' ", '-',$request->titre), 'affiche' => $animeInfo->affiche, 'description' => $requête->description, 'release_date' => $request->release_date, 'bande-annonce' => $animeInfo->bande-annonce, ]); return réponse()->json(['message' => 'Les données ont été mises à jour avec succès']);```</pre> <p><br /></p>
P粉336536706P粉336536706508 Il y a quelques jours490

répondre à tous(1)je répondrai

  • P粉533898694

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

    Vous ne pouvez pas utiliser la fonction property_exist() pour obtenir les noms de colonnes car ces propriétés ne sont pas accessibles directement en tant que propriétés dans l'objet Model.

    Pour vérifier cela, essayez-le sur bricoleur :


    dd(User::first())

    Ma suggestion est d'utiliser la méthode attributsarray() ou getAttributes() combinée avec array_keys() pour obtenir le tableau de noms d'attribut du modèle. N'est-ce pas fait ? :

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

    répondre
    0
  • Annulerrépondre