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).
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();
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);
Il suffit de le tourner pour remplir et remplir un éloquent
$arr = json_decode($json, true);
$post = new Post;
$post->fill($arr);
Pouvez-vous essayer comme ça?
public function store($poststuff)
{
$post = new Post;
$post->text = $poststuff['text'];
$post->save();
}