web-dev-qa-db-fra.com

Comment puis-je convertir json en un Laravel Modèle éloquent?

si j’ai un modèle éloquent appelé Post et que la table mysql a:

iD entier, chaîne de texte

Comment convertir ce JSon:

{ post: { text: 'my text' } }

A l'objet Post pertinent qu'une fois reçu dans le contrôleur, je peux enregistrer dans la base de données comme suit:

public function store(Post $post)
{
    $post->save();
}

Je ne cherche pas à construire la logique qui ferait cela pour moi, mais pour la méthode Laravel (ou est-il possible qu'il n'y en ait pas? Je l'ai googlé sans aucun résultat pertinent).

6
Zephram

fill ressemble à la méthode souhaitée. Pour éviter d'ajouter chaque attribut à votre tableau $filled, ce que vous devez faire si vous souhaitez utiliser la méthode fill, vous pouvez utiliser la méthode forceFill .

Il accepte un tableau d'attributs associatif, le JSON devra donc être décodé et nous devrons obtenir la clé post intérieure:

$rawJson = "{ post: { text: 'my text' } }";
$decodedAsArray = json_decode($rawJson, true);
$innerPost = $decodedAsArray['post'];

Une fois que nous avons les données décodées, nous pouvons créer une instance du modèle éloquent Post et appeler forceFill dessus:

$post = new Post();
$post->forceFill($innerPost);
$post->save();

Ceci est similaire à faire:

$post = new Post();
foreach ($innerPost as $key => $value) {
    $post->$key = $value;
}
$post->save();
3
AlbinoDrought
  1. Convertir json en tableau
  2. Hydrater le modèle du tableau

    $data = '{  
                "unique_id_001":{"name":"John","email":"[email protected]"},
                "unique_id_002":{"name":"Ken","email":"[email protected]"}
              }';
    $object = (array)json_decode($data);
    $collection = \App\User::hydrate($object);
    $collection = $collection->flatten();   // get rid of unique_id_XXX
    
    /*
        Collection {#236 ▼
          #items: array:2 [▼
            0 => User {#239 ▶}
            1 => User {#240 ▶}
          ]
        }
     */
    dd($collection);
    
3

Il suffit de le tourner pour remplir et remplir un éloquent

$arr = json_decode($json, true);
$post = new Post;
$post->fill($arr);
1
Shahaf Antwarg

Pouvez-vous essayer comme ça?

public function store($poststuff)
{
    $post = new Post;
    $post->text = $poststuff['text'];
    $post->save();
}
0
Odinovsky