我得到了兩個實體。 這是第一個具有一對多releation:symfony2學說如何在持續之後更新OneToMany實體?
class MarketMain
{
/**
* @var integer
*
* @ORM\Column(name="id", type="bigint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="\Acme\CMSBundle\Entity\MarketLanguage", mappedBy="marketMain", indexBy="langId", cascade="all", orphanRemoval=true, fetch="EXTRA_LAZY")
*/
private $marketLanguage;
}
這是第二個具有reverst多對一releation:
class MarketLanguage
{
/**
* @var integer
*
* @ORM\Column(name="market_id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $marketId = 0;
/**
* @var integer
*
* @ORM\Id
* @ORM\Column(name="lang_id", type="integer", nullable=false)
*/
private $langId = 1;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=200, nullable=true)
*/
private $name;
/**
* @var \Acme\CMSBundle\Entity\MarketMain
*
* @ORM\ManyToOne(targetEntity="\Acme\CMSBundle\Entity\MarketMain", inversedBy="marketLanguage")
* @ORM\JoinColumn(name="market_id", referencedColumnName="id")
*/
private $marketMain;
}
而且我要救實體是這樣的:
$em = $this->getDoctrine()->getManager();
$marketMain = new MarketMain();
$marketLanguage = new ArrayCollection();
$marketLanguage->set(1,new MarketLanguage());
$marketLanguage->set(2,new MarketLanguage());
$marketLanguage->set(3,new MarketLanguage());
$marketMain->setMarketLanguage($marketLanguage);
foreach ($marketMain->getMarketLanguage() as $market_language)
{
$market_language->setMarketMain($marketMain);
}
$em->persist($marketMain);
$em->flush();
foreach ($marketMain->getMarketLanguage() as $market_language)
{
$market_language->setName("Default name for MarketMain entity id:".$marketMain->getId());
}
$em->flush();
但經過第二次刷新我的MarketLanguage實體不更新,在教條查詢日誌中,我看到MarketLanguage實體在與MarketMain保持後沒有關係。並且請不要說在繼續之前我必須設置MarketLanguage名稱,因爲我必須爲該名稱添加刷新的ID。
這是查詢(從教義日誌),在第二次沖洗執行更新:
"START TRANSACTION" [] []
UPDATE market_language SET name = ? WHERE market_id = ? AND lang_id = ? ["Default name for MarketMain entity 15",0,"1"] []
"COMMIT" [] []
你說MargetLanguage實體不更新,那麼爲什麼在日誌文件中有UPDATE語句? – qtuan 2015-02-06 08:08:24