我有两个实体产品和类别与类型多对一的关联,应该我想创建一个新的产品,我已经知道它的类别(指我知道ID类)主义Symfony2的持续关联实体与现有
CLASS产品
/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="Category")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;
}
Class类
/**
* @ORM\Entity
* @ORM\Table(name="category")
*/
class Category
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
}
SCRNARIO:科瑞新产品,并认为我知道ID的类别,所以我们不需要给我们E类实体的查找方法得到它(使事情更快)
$em = $this->get('doctrine')->getManager();
$category = new Category();
$category->setId(12);
$product = new Product();
$product->setName('product 1');
$product->setCategory($category);
$em->persist($product);
$em->flush();
上面的代码没有工作,那么产生一个异常:
一个新的实体是通过关系 “发现AOBundle \实体\产品#分类”中没有配置级联 持续操作的实体: AOBundle \实体\目录@ 0000000049a05dc500000000723a1be6。要解决 此问题:显式调用此未知实体上的EntityManager#persist()或配置级联在 映射中保留此关联,例如@ManyToOne(..,cascade = {“persist”})。如果你不能 找出哪些实体引起该问题落实 “AOBundle \实体\目录#__的toString()”,以获得一个线索。
但是当我使用find方法来获取它的工作类别实例,但我不喜欢这个解决方案我想让应用程序更快有没有任何解决方案。 感谢
干净的方法是获取实体(例如使用' - > find(12)' - 我不知道为什么你会这么做以避免这种情况...你可以尝试*'$类= $ EM->合并($类);''你$分类 - > SETID(12)之后;'呼叫 – ccKep
查找学说引用避免了需要实际加载的实体$类= $ EM - > getReference(12); – Cerad