Php 数组在更新后不保留以前的元素
作业实体有一个名为“候选对象”的属性,该属性是一个用户数组,未映射或与任何其他实体相关。在给定的路径上,我们通过id获取特定作业对象。我们通过分配从当前会话中获得的用户来更新候选对象数组。结果表明,用户正在被保存,但在每次通话中,我们都会失去以前保存的用户 为什么会这样Php 数组在更新后不保留以前的元素,php,symfony,Php,Symfony,作业实体有一个名为“候选对象”的属性,该属性是一个用户数组,未映射或与任何其他实体相关。在给定的路径上,我们通过id获取特定作业对象。我们通过分配从当前会话中获得的用户来更新候选对象数组。结果表明,用户正在被保存,但在每次通话中,我们都会失去以前保存的用户 为什么会这样 /** * @Route("/job/apply/{id}", requirements={"id"="\d+"}, name="student_candidate", methods={"POST"}) * * @par
/**
* @Route("/job/apply/{id}", requirements={"id"="\d+"}, name="student_candidate", methods={"POST"})
*
* @param int $id
*
* @return JsonResponse
*/
public function apply(int $id)
{
$job = $this->getDoctrine()->getRepository(Job::class)->find($id);
$candidate = $this->getUser();
$job->addCandidate($candidate);
$this->getDoctrine()->getManager()->flush();
return new JsonResponse([
'status' => 'success',
'message' => 'some_success_message'
]);
}
我假设没有保存任何用户,因为该字段没有像您正确指出的那样映射。由于您在每个请求中添加了当前用户,因此用户本身就在那里(暂时直到请求结束),但由于未映射候选用户,因此不会进行保存。也许我误解了你的问题,但是对于一个未映射的字段(读:虚拟/非持久化)你期望什么呢?哦,对。我应该映射它,它可能会工作。通过映射它,我应该选择一个关系,对吗?很多单向的方法是正确的吗?一份工作可以有很多应聘者,很多应聘者可以有很多工作,对吗?很多是正确的,是的。确保创建了适当的联接表。
class Job
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
/**
* @var string
*
* @ORM\Column(name="content", type="text", length=65535)
*/
private $content;
/**
* @var User[]|ArrayCollection
*/
private $candidates;
public function __construct()
{
$this->candidates = new ArrayCollection();
}
/**
* @return User[]|ArrayCollection
*/
public function getCandidates()
{
return $this->candidates;
}
/**
* @param User $user
*
* @return Job
*/
public function addCandidate(User $user)
{
$this->candidates[] = $user;
return $this;
}
}