Php 我必须在条令中持久化存储库中的对象吗?

Php 我必须在条令中持久化存储库中的对象吗?,php,orm,doctrine,Php,Orm,Doctrine,我必须保留从存储库中获取的对象吗?例如: $foo = $this->repository->find($id); $foo->setBar($baz); $this->flush(); 我是否必须添加$this->persist($foo)?当我不必保存更改时?如果这是条令存储库,则它找到的实体已被管理,因此您不必调用persist()。您可以对尚未由enytityManager管理的实体调用persist,因此在大多数情况下,它是针对要存储的新对象的 这不会将用户

我必须保留从存储库中获取的对象吗?例如:

$foo = $this->repository->find($id);
$foo->setBar($baz);

$this->flush();

我是否必须添加
$this->persist($foo)?当我不必保存更改时?

如果这是条令存储库,则它找到的实体已被管理,因此您不必调用persist()。您可以对尚未由enytityManager管理的实体调用persist,因此在大多数情况下,它是针对要存储的新对象的

这不会将用户保存到数据库中

$user = new User;
$user->setName('Mr.Right');
$em->flush();
这将

$user = new User;
$user->setName('Mr.Right');
$em->persist($user);
$em->flush();
稍后获取的实体已经被管理,因此在代码中更改将被刷新

通过将实体传递给EntityManager#persist($entity)方法,可以使实体持久化。通过对某个实体应用persist操作,该实体将被管理,这意味着从现在起,它的持久性将由EntityManager管理。因此,在调用EntityManager#flush()时,这样一个实体的持久状态随后将与数据库正确同步

您可以通过调用
EntityManager->contains($entity)
来验证这一点,以查看此实体是否由EM管理,在您的情况下,它应该已经显示它是。仅在持久化后才用于新实体

你问:

当我不必坚持改变时


这不是关于持久化更改,而是关于使实体本身持久化。

如果这是条令存储库,则它找到的实体已被管理,因此您不必调用persist()。您可以对尚未由enytityManager管理的实体调用persist,因此在大多数情况下,它是针对要存储的新对象的

这不会将用户保存到数据库中

$user = new User;
$user->setName('Mr.Right');
$em->flush();
这将

$user = new User;
$user->setName('Mr.Right');
$em->persist($user);
$em->flush();
稍后获取的实体已经被管理,因此在代码中更改将被刷新

通过将实体传递给EntityManager#persist($entity)方法,可以使实体持久化。通过对某个实体应用persist操作,该实体将被管理,这意味着从现在起,它的持久性将由EntityManager管理。因此,在调用EntityManager#flush()时,这样一个实体的持久状态随后将与数据库正确同步

您可以通过调用
EntityManager->contains($entity)
来验证这一点,以查看此实体是否由EM管理,在您的情况下,它应该已经显示它是。仅在持久化后才用于新实体

你问:

当我不必坚持改变时

它不是关于持久的变化,而是关于使实体本身持久化