我有兩個實體產品和類別與類型多對一的關聯,應該我想創建一個新的產品,我已經知道它的類別(指我知道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