2017-09-10 18 views
0

からのデータをAPIからデータを受け取りました。これは、APIからの調査の配列によるjsonの応答です。すべての調査では、以下のように形成しています。アプリケーションでマージは、私は私のLaravelアプリケーションのメソッドを持っているデータベース

{ 
    "hash": "8537f99bb4166da9f74f02ebb70907cf", 
    "sending_date": "2017-08-23T08:32:37+02:00", 
    "expiration_date": "2018-02-23T08:32:37+01:00", 
    "created_at": "2017-08-23T08:32:37+02:00", 
    "trans_id": "10-550\r\n", 
    "id": 18, 
    "status": { 
     "name": "new", 
     "id": 1 
    }, 
    "base_survey": { 
     "name": "Base Survey Test 1", 
     "created_at": "2017-07-25T10:08:18+02:00", 
     "creator_trans_id": "10-615", 
     "date_start": "2017-07-25T00:00:00+02:00", 
     "expiration_int": 6, 
     "expiration_string": "months", 
     "survey_prefix": "PSI", 
     "welcome_message": "test1", 
     "expiration_message": "test2", 
     "id": 1, 
     "template": { 
      "path": "/template_ssi_1/", 
      "name": "SSI", 
      "id": 1 
     } 
    } 
} 

を私はオブジェクト調査と呼ばれているwchichオブジェクトを接続するリレーショナルテーブルがあります。私は、この表からのエンティティの下に示しています

<?php 
namespace App\Http\Entities\Cic; 
use Doctrine\ORM\Mapping as ORM; 
/** 
* 
* @ORM\Entity 
* @ORM\Table(name="cic_case_survey") 
*/ 
class CicCaseSurvey 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue 
    * @ORM\Column(type="integer") 
    */ 
    protected $id; 

    /** 
    * 
    * @ORM\OneToOne(targetEntity="CicCase", cascade={"all"}) 
    * @ORM\JoinColumn(name="case_id", referencedColumnName="id") 
    * 
    */ 
    protected $case; 

    /** 
    * 
    * @ORM\Column(name="survey_id", type = "integer") 
    * 
    */ 
    protected $survey; 

    /** 
    * @return mixed 
    */ 

    /** 
    * @ORM\Column(type="datetime") 
    * @var datetime 
    */ 
    protected $created_at; 

    /** 
    * @ORM\Column(type="datetime") 
    * @var datetime 
    */ 
    protected $updated_at; 

    public function getCreatedAt() { 
     return $this->created_at; 
    } 

    public function setCreatedAt() { 
     $this->created_at = Carbon::now(); 
    } 

    public function getUpdatedAt() { 
     return $this->updated_at; 
    } 

    public function setUpdatedAt() { 
     $this->updated_at = Carbon::now(); 
    } 

    public function getSurvey() 
    { 
     return $this->survey; 
    } 

    /** 
    * @param mixed $survey 
    */ 
    public function setSurvey($survey) 
    { 
     $this->survey = $survey; 
    } 

    public function getCase() 
    { 
     return $this->case; 
    } 

    /** 
    * @param mixed $case 
    */ 
    public function setCase($case) 
    { 
     $this->case = $case; 
    } 


    /** 
    * @return mixed 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * @param mixed $id 
    */ 
    public function setId($id) 
    { 
     $this->id = $id; 
    } 

} 

はAPIからの応答の後、私は調査のobejcts内のデータと事例から、テーブルcic_case_surveyに基づいて

データを接続しようとしています。メソッドからわかるようにmergeSurveysWithCasesサーベイデータを持つすべての接続ケースデータ(ケースIDとfirstContact)に対してfindOneByメソッドを使用するループでマージしました。私の意見では、この解決策は最適ではありません。私はそれが非常に多くのデータのために悪いと思う。誰もがおそらくこのオブジェクトをマージするよりよい解決法を知っていますか?私は助けに非常に感謝するでしょう ;)

答えて

0

あなたのケースでは、タスクは「Json配列から実体を非直列化する」と記載する必要があります。おそらく、ほとんどの作業を行うサードパーティのシリアライザライブラリの助けを借りてそれを作成する必要があります。私は個人的にJMSSerializerを使用しています。これはdoctrineアノテーションに依存します。エンティティにアノテーションメタデータを追加するだけで、シリアライザにデシリアライズされたエンティティタイプを提供してこの作業を行う必要があります。詳細はこちらからhttps://jmsyst.com/libs/serializer

関連する問題