在findBy之后,Doctrine用急切的读取值重写关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在findBy之后,Doctrine用急切的读取值重写关系相关的知识,希望对你有一定的参考价值。

我有一个简单的实体

/**
 * @ORMEntity(repositoryClass="...RepositoryUserTestRepository")
 * @ORMTable(name="users", uniqueConstraints={
 *     @ORMUniqueConstraint(name="U_email", columns={"email"})
 * })
 * @UniqueEntity("email", message="Email is already used!")
 */
class UserTest
{
    /**
     * @ORMId
     * @ORMColumn(type="integer")
     * @ORMGeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     * @ORMColumn(type="string", length=180)
     * @AssertNotBlank()
     * @AssertEmail()
     */
    protected $email;

    /**
     * @var string
     * @ORMColumn(type="string", length=255, nullable=true)
     * @AssertNotBlank()
     */
    protected $jobTitle;

    /**
     * @var Company
     * @ORMManyToOne(targetEntity="...EntityCompany", fetch="EAGER")
     * @ORMJoinColumn(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(...EntityCompany $company = null)
    {
        $this->company = $company;

        return $this;
    }

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

和控制器

$repo = $this->getDoctrine()->getRepository('..EntityUserTest');

$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-dump,原创

第二次转储,更改后没有刷新

在findBy,jobTitle之后的第三次转储 - 使用新值,公司 - 原始值,更改丢失了

这是正常的学说行为还是一个错误?我使用doctrine / orm v2.5.11。它是在新版本中修复的吗?

任何帮助,请

答案

通过存储库的findBy()查找未刷新的实体时,这是Doctrine的正常行为。请参阅https://github.com/doctrine/orm/issues/5092以获取更多信息。

以上是关于在findBy之后,Doctrine用急切的读取值重写关系的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine 的 findBy*() 中的 LIKE 和 % 通配符

多对多关系上的 Doctrine2 findBy()

Doctrine2 findBy 关系对象触发字符串转换错误

基于模型实例获取学说结果

如何使用 Doctrine 查询 NOT NULL?

appium 切换native/ webview,findby,还有页面元素定位一直小于0的问题的解决