我的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 方法与调查数据。在我看来,这个解决方案并不是最优的。我认为它会对很多数据起作用。有没有人知道合并这些对象的更好解决方案?我非常感谢你的帮助 最好的问候;)
答案 0 :(得分:0)
因此,在您的情况下,任务应该被描述为&#34;从Json数组反序列化实体&#34;。也许你应该在一些第三方序列化器库的帮助下完成它,它将为你完成大部分工作。我个人使用JMSSerializer:它取决于学说注释 - 所以你只需要在你的实体上添加注释元数据,并为序列化器提供反序列化的实体类型以使其工作。您可以在此处获取更多详细信息:https://jmsyst.com/libs/serializer