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