Doctrine自定义存储库方法和非托管实体

时间:2014-03-26 15:37:35

标签: symfony doctrine dql

我有自定义实体存储库(让我们说CategoryRepository)返回Doctrine实体。我也有新创建的实体(让我说Product)我想坚持下去。 产品与类别有关,在这种情况下,产品是关系的拥有方,所以我有以下代码:

$category = $categoryRepository->customGetCategory($someCriteria);
$product = new Product();
$product->setCategory($category);
$em->persist($product);

,结果是

  

[学说\ ORM \ ORMInvalidArgumentException]
  通过这种关系找到了一个新实体   '的Acme \ SomethingBundle \实体\产品类别#'没有配置   为实体级联持续运营:blahblah。要解决这个问题   问题:在此未知上显式调用EntityManager#persist()   实体或配置级联在映射中保持此关联   例如@ManyToOne(..,cascade = {" persist"})

现在我知道默认情况下,\Doctrine\ORM\Query::getResult()工厂方法返回Query对象时使用EntityManager::createQuery($dql)方法的自定义存储库方法返回的所有实体都是分离的。所以我已经在存储在数据库中的存储库返回了实体,而我无法找到一种方法让教条像f返回的任何实体一样进行管理。恩。 $repository->findBy()方法。

有人能指出我正确的方向吗?我真的很想解决这个问题,它会杀了我。

1 个答案:

答案 0 :(得分:0)

这可能是提出的五大主义问题之一。只是很难搜索。可以尝试搜索错误消息。

问题是从不调用Category :: setProduct。使用以下命令更新您的产品实体

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