我被困在這種情況下,我複製它的一個例子,從symfony的文件,這裏它的外觀:主義一對多關係不取相關實體
興業
/**
* @ORM\Entity
*/
class Category
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="category", fetch="EAGER")
*/
private $products;
public function __construct()
{
$this->products = new ArrayCollection();
}
public function products(): Collection
{
return $this->products;
}
public function id()
{
return $this->id;
}
}
及相關產品類
/**
* @ORM\Entity
*/
class Product
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;
public function __construct($category)
{
$this->category = $category;
}
public function id()
{
return $this->id;
}
public function category()
{
return $this->category;
}
}
TEST
現在我的測試代碼這個片段,我想獲取類別,並能夠得到它的產品:
$cat = new Category();
$prod = new Product($cat);
$this->entityManager->persist($prod);
$this->entityManager->persist($cat);
$this->entityManager->flush();
$crepo = $this->getEntityManager()->getRepository(Category::class);
$c = $crepo->findAll()[0];
var_dump(get_class($c->products()), $c->products()->count())
我所得到的是預計PersistentCollection
類的產品,但計數爲0而應該有1個產品。
我可以看到,我有合適的外鍵設置適當的類別和產品記錄的數據庫。
替代方法
我調試PersistentCollection
產品,可以看到它的標誌設置爲初始化= TRUE。有了這個我可以強制這個工作,通過呼籲
$c->products()->setInitialized(false);
$c->products()->initialize();
但afaik這不是它應該如何工作,應該嗎?
看起來像你期待學說用你的'新Product'構造函數,但它不是由學說稱爲收集工作,檢查了這一點:HTTP://文檔.doctrine-project.org /項目/學說-ORM/EN /最新/參考/ architecture.html#實體 – LBA
你爲什麼不使用級聯堅持? [理解級聯堅持學說操作](http://www.inanzzz.com/index.php/post/hry2/understanding-the-cascade-persist-operations-in-doctrine) – BentCoder
感謝響應,但既不的這是原因。我並不期望這個教義可以調用構造函數,也可以節省工作量,所以級聯持久性是沒有關係的。我設法找出原因併發布和回答 –