【问题标题】: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)

标签: symfony doctrine dql


【解决方案1】:

这可能是被问到的 5 个最重要的教义问题之一。只是很难搜索。可以尝试搜索错误消息。

问题是 Category::setProduct 永远不会被调用。更新您的 Product 实体:

class Product
{
    public function setCategory($category);
    {
        $this->category = $category;
        $category->setProduct($this); // *** Add this
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2018-01-05
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2018-02-09
    相关资源
    最近更新 更多