Доктрина переписывает отношения с нетерпеливым извлечением значения после findBy - PullRequest
4 голосов
/ 26 апреля 2019

У меня есть простая сущность

/**
 * @ORM\Entity(repositoryClass="...\Repository\UserTestRepository")
 * @ORM\Table(name="users", uniqueConstraints={
 *     @ORM\UniqueConstraint(name="U_email", columns={"email"})
 * })
 * @UniqueEntity("email", message="Email is already used!")
 */
class UserTest
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     * @ORM\Column(type="string", length=180)
     * @Assert\NotBlank()
     * @Assert\Email()
     */
    protected $email;

    /**
     * @var string
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Assert\NotBlank()
     */
    protected $jobTitle;

    /**
     * @var Company
     * @ORM\ManyToOne(targetEntity="...\Entity\Company", fetch="EAGER")
     * @ORM\JoinColumn(name="company_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
     */
    private $company;

    public function getId()
    {
        return $this->id;
    }

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;

        return $this;
    }

    public function getJobTitle()
    {
        return $this->jobTitle;
    }

    public function setJobTitle($jobTitle)
    {
        $this->jobTitle = $jobTitle;
        return $this;
    }

    public function setCompany(...\Entity\Company $company = null)
    {
        $this->company = $company;

        return $this;
    }

    public function getCompany()
    {
        return $this->company;
    }
}

и контроллер

$repo = $this->getDoctrine()->getRepository('..\Entity\UserTest');

$user = $repo->find(519);
dump($user);

$user->setJobTitle('new value');
$user->setCompany(null);
dump($user);

$repo->findBy(['email' => 'test@test.com']);
dump($user);

1-st dump, original

2-nd dump, after changes without flush

3-rd dump, after findBy, jobTitle - with new value, company - original value, changes were lost

1-й дамп, исходный

2-й дамп, после изменений без сброса

3-й дамп, после findBy, jobTitle - с новым значением, компания - исходное значение, изменения были потеряны

Это нормальное поведение доктрины или это ошибка?Я использую Doctrine / Orm v2.5.11.Это было исправлено в более новых версиях?

Любая помощь, пожалуйста,

1 Ответ

1 голос
/ 28 апреля 2019

Это нормальное поведение доктрины при поиске незапятнанной сущности через findBy () репозитория. Пожалуйста, обратитесь к https://github.com/doctrine/orm/issues/5092, чтобы получить больше информации.

...