合并API中的数据和数据库中的数据

时间:2017-09-10 21:05:59

标签: laravel doctrine-orm doctrine

我的Laravel应用程序中有一个方法:

private function mergeSurveysWithCases($surveys){

        foreach($surveys as $survey ){
             $surveyId  = $survey->survey->id;
        $caseSurvey = $this->SurveysRepository->findOneBy(['survey' => $surveyId]);
        $caseId = $caseSurvey->getCase()->getId();
        $firstContant = $this->caseRepository->getFirstContactByCase($caseId);
        $survey->caseData = ["caseId" => $caseId,
                             "firstContact" => $firstContant
        ];
        }
        return $surveys;
    }

我们可以看到这种方法的论点是$调查。这是来自API的一系列调查的json响应。每项调查的形式如下:

{
    "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
        }
    }
} 

在应用程序中,我有一个关系表,它将对象案例与对象调查连接起来。我在下表中显示了实体:

<?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响应后,我正在尝试基于表cic_case_survey

进行连接

来自调查数据案例的数据。正如我们从方法 mergeSurveysWithCases 中看到的那样,我已经完成了循环合并,我对每个连接案例数据(案例Id和firstContact)使用 findOneBy 方法与调查数据。在我看来,这个解决方案并不是最优的。我认为它会对很多数据起作用。有没有人知道合并这些对象的更好解决方案?我非常感谢你的帮助 最好的问候;)

1 个答案:

答案 0 :(得分:0)

因此,在您的情况下,任务应该被描述为&#34;从Json数组反序列化实体&#34;。也许你应该在一些第三方序列化器库的帮助下完成它,它将为你完成大部分工作。我个人使用JMSSerializer:它取决于学说注释 - 所以你只需要在你的实体上添加注释元数据,并为序列化器提供反序列化的实体类型以使其工作。您可以在此处获取更多详细信息:https://jmsyst.com/libs/serializer