教义自定义存储库方法和非托管实体
Posted
技术标签:
【中文标题】教义自定义存储库方法和非托管实体【英文标题】:Doctrine custom repository methods and unmanaged entities 【发布时间】:2014-03-26 15:37:35 【问题描述】:我有自定义实体存储库(比如说CategoryRepository
),它返回 Doctrine 实体。我也有新创建的实体(比如说Product
),我想坚持。
产品与类别相关,在这种情况下,产品是关系的拥有方,所以我有以下代码:
$category = $categoryRepository->customGetCategory($someCriteria);
$product = new Product();
$product->setCategory($category);
$em->persist($product);
结果是
[学说\ORM\ORMInvalidArgumentException] 通过关系发现了一个新实体 'Acme\SomethingBundle\Entity\Product#category' 未配置 级联实体的持久操作:blahblah。为了解决这个 问题:在这个未知数上显式调用 EntityManager#persist() 实体或配置级联在映射中保留此关联 例如@ManyToOne(..,cascade="persist")
现在我知道,使用\Doctrine\ORM\Query::getResult()
方法返回的自定义存储库方法返回的所有实体,其中查询对象由EntityManager::createQuery($dql)
工厂方法返回,默认情况下都是分离的。所以我得到了存在于数据库中的存储库返回的实体,我找不到一种方法来管理它,就像 f 返回的任何实体一样。前任。 $repository->findBy()
方法。
谁能指出我正确的方向?我真的很想解决这个问题,这让我很生气。
【问题讨论】:
能否请您发布您的类别和产品实体? (只有它们之间关系的代码sn-ps) 【参考方案1】:这可能是被问到的 5 个最重要的教义问题之一。只是很难搜索。可以尝试搜索错误消息。
问题是 Category::setProduct 永远不会被调用。更新您的 Product 实体:
class Product
public function setCategory($category);
$this->category = $category;
$category->setProduct($this); // *** Add this
【讨论】:
以上是关于教义自定义存储库方法和非托管实体的主要内容,如果未能解决你的问题,请参考以下文章