Php 数组在更新后不保留以前的元素

Php 数组在更新后不保留以前的元素,php,symfony,Php,Symfony,作业实体有一个名为“候选对象”的属性,该属性是一个用户数组,未映射或与任何其他实体相关。在给定的路径上,我们通过id获取特定作业对象。我们通过分配从当前会话中获得的用户来更新候选对象数组。结果表明,用户正在被保存,但在每次通话中,我们都会失去以前保存的用户 为什么会这样 /** * @Route("/job/apply/{id}", requirements={"id"="\d+"}, name="student_candidate", methods={"POST"}) * * @par

作业实体有一个名为“候选对象”的属性,该属性是一个用户数组,未映射或与任何其他实体相关。在给定的路径上,我们通过id获取特定作业对象。我们通过分配从当前会话中获得的用户来更新候选对象数组。结果表明,用户正在被保存,但在每次通话中,我们都会失去以前保存的用户

为什么会这样

/**
 * @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;
    }
}