1
我最近開始使用Symfony2-Doctrine2。我沒有得到如何在inheritance mapping中保存數據。正確的Symfony-doctrine繼承映射
我的要求:
對於學習練習:
- 我正在測試庫應用程序(要求不太現實)。
- 在高層次上,圖書館可能會包含許多不同類型的項目,例如書籍,文章,手冊等。
- 它們有一些常見的字段,如名稱,發佈年份等,以及一些項目特定的細節,如書有IDBN,發佈者;手冊有公司,產品。
- 再一次讓問題變得更復雜一點,還有另外一個'item_content'表有不同的語言描述。
要快速可視化,我以下結構:
我上述結構按教義文檔實現了inheritance mapping & Bidirectional one to many relation
我的問題:如何保存數據使用Symfony2(我已經運行了正確的路由/動作,只需要在控制器中寫入代碼或者在存儲庫中更好地寫入代碼)。在保存數據(比如手動)時,我想將數據保存在Item,Manual和ItemContect表中,但由於數據庫中的discr
字段而變得混淆。我沒有在上述結構中找到保存數據的代碼。 我不需要完整的代碼,只需少量提示即可。我的項目類是如下(其他類有作爲學說文檔提到的適當逆):
/**
* Article
*
* @ORM\Table(name="item")
* @ORM\Entity(repositoryClass="Test\LibraryBundle\Entity\ItemRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"book" = "Book", "manual" = "Manual", "article" = "Article"})
*/
class Item
{
//...
/**
* For joining with ItemContent
*
* @ORM\OneToMany(targetEntity="ItemContent", mappedBy="item")
**/
private $itemContents;
public function __construct()
{
$this->itemContents = new ArrayCollection();
}
//...
}
謝謝@VBee啊是的,我的壞。沒有考慮'$ item = new Manual();'我爲Item和Manual創建了單獨的對象。 但是這引發了另一個疑問,我不想在控制器中編寫代碼,而是編寫代碼庫。所以'$ item = new Manual();'屬於哪裏? ItemRepository或ManualRepository。 –
ManualRepository不存在,最好的做法是創建一個自定義實體管理器(如https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Model/UserManager.php)。我建議你第一次把這個邏輯放在你的控制器裏。 – VBee
對不起,您可以創建ManualRepository,但我的建議是相同的,請僅使用存儲庫來提取數據。 – VBee