postと呼ばれるEloquentモデルがあり、mysqlテーブルに次のものが含まれている場合:
整数ID、文字列テキスト
このJSonを変換するにはどうすればよいですか。
{ post: { text: 'my text' } }
コントローラーで受信すると、次のようにデータベースに保存できる関連するPostオブジェクトに:
public function store(Post $post)
{
$post->save();
}
私はそれを行うロジックを構築するつもりはありませんが、Laravel方法(またはそれがない場合もあるでしょうか?関連する結果なしでググった)の場合) 。
配列からモデルを水和する
$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);
fill
は、希望するメソッドのように見えます。 fill
メソッドを使用する場合に必要な$filled
配列へのすべての属性の追加を回避するには、forceFill
method 。
属性の連想配列を受け入れるため、JSONをデコードする必要があり、内部のpost
キーを取得する必要があります。
$rawJson = "{ post: { text: 'my text' } }";
$decodedAsArray = json_decode($rawJson, true);
$innerPost = $decodedAsArray['post'];
デコードされたデータを取得したら、Post
eloquentモデルのインスタンスを作成し、そのモデルでforceFill
を呼び出すことができます。
$post = new Post();
$post->forceFill($innerPost);
$post->save();
これは次のように行います。
$post = new Post();
foreach ($innerPost as $key => $value) {
$post->$key = $value;
}
$post->save();
ちょうどそれを配列に変えて、雄弁な人を満たします
$arr = json_decode($json, true);
$post = new Post;
$post->fill($arr);
このようにしてみませんか?
public function store($poststuff)
{
$post = new Post;
$post->text = $poststuff['text'];
$post->save();
}