web-dev-qa-db-ja.com

jsonをLaravel Eloquent Modelに変換するにはどうすればよいですか?

postと呼ばれるEloquentモデルがあり、mysqlテーブルに次のものが含まれている場合:

整数ID、文字列テキスト

このJSonを変換するにはどうすればよいですか。

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

コントローラーで受信すると、次のようにデータベースに保存できる関連するPostオブジェクトに:

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

私はそれを行うロジックを構築するつもりはありませんが、Laravel方法(またはそれがない場合もあるでしょうか?関連する結果なしでググった)の場合) 。

9
Zephram
  1. Jsonを配列に変換
  2. 配列からモデルを水和する

    $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();
4
AlbinoDrought

ちょうどそれを配列に変えて、雄弁な人を満たします

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

このようにしてみませんか?

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