mysql - 我可以使用MySQL建立Symfony2 ORM继承关系吗?

标签 mysql symfony inheritance orm relationship

我有一张 table tech_note我想要多 3 张 table tech_note_es , tech_note_entech_note_fr (将来会有更多 table )。还有tech_note可以同时在3个表中。

我的想法是附加到tech_note_en并自动接收来自 tech_note 的属性.

第二次编辑:

我想要这样的东西:我在 Tech_note_EN by ID=3 中搜索(我接收来自 tech_note_EN with ID=3 的字段和字段 tech_note with ID=3

但是如果我搜索Tech_note_ES BY ID=3 (我接收来自 tech_note_ES with ID=3 的字段和来自 tech_note with ID=3 的 tech_note 字段(与上面相同的字段)

技术说明的 ID=3。 Tech_note_EN 的 ID=3,Tech_note_ES 的 ID=3

编辑新类:

现在我遇到了这个错误: 实体“EVTS\FrontendBundle\Entity\Tech_note_en”具有复合标识符,但使用 ID 生成器而不是手动分配(身份、序列)。不支持此功能。

技术说明

abstract class Tech_note {

        /**
         * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */

    private $id;


    /**
     * @var datetime $control_date
     * 
     * @ORM\Column(name="control_date", type="datetime")
     */
    private $control_date;

    /**
     * @var string $comment
     *
     * @ORM\Column(name="comment", type="string")
     */
    private $comment;
<小时/>

TECH_NOTE_EN

class Tech_note_en extends Tech_note {


    /**
     * @var integer $tech_note_id
     *
     * @ORM\Id
     * @ORM\Column(name="tech_note_id", type="integer")
     * @ORM\OneToOne(targetEntity="tech_note")
     * @ORM\JoinColumn(name="tech_note_id",referencedColumnName="id")
     */
    private $tech_note_id;    

    /**
     * @var text $symptom
     *
     * @ORM\Column(name="symptom", type="text")
     */
    private $symptom;

    /**
     * @var text $cause
     *
     * @ORM\Column(name="cause", type="text")
     */
    private $cause;

    /**
     * @var string $solution
     *
     * @ORM\Column(name="solution", type="string")
     */
    private $solution;
<小时/> <小时/>

旧类(class)

技术说明

class Tech_note {

    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */

    private $id;


    /**
     * @var datetime $control_date
     * 
     * @ORM\Column(name="control_date", type="datetime")
     */
    private $control_date;

    /**
     * @var string $comment
     *
     * @ORM\Column(name="comment", type="string")
     */
    private $comment;
<小时/>

TECH_NOTE_EN

class Tech_note_en
{
    /**
     * @var integer $tech_note_id
     *
     * @ORM\Id
     * @ORM\Column(name="tech_note_id", type="integer")
     * @ORM\OneToOne(targetEntity="tech_note")
     * @ORM\JoinColumn(name="tech_note_id",referencedColumnName="id")
     */
    private $tech_note_id;    

    /**
     * @var text $symptom
     *
     * @ORM\Column(name="symptom", type="text")
     */
    private $symptom;

    /**
     * @var text $cause
     *
     * @ORM\Column(name="cause", type="text")
     */
    private $cause;

    /**
     * @var string $solution
     *
     * @ORM\Column(name="solution", type="string")
     */
    private $solution;

最佳答案

有一个很棒的解决方案可以解决您的问题,即 single table inheritance
其作用基本上是拥有一个包含常规字段的中心表,并链接到具有特定字段的其他表。

在你的情况下,我会使用这个架构模型:
抽象类TechNote(抽象公共(public)实体,包含公共(public)字段)
class TechNoteEn extends TechNote(继承公共(public)字段并添加特定 EN 字段的特定实体)
等等。

我发现这是解决您的问题的最佳架构解决方案。

关于mysql - 我可以使用MySQL建立Symfony2 ORM继承关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29791591/

相关文章:

mysql查询内部连接变慢

java - 在 B 继承自 A 的情况下创建了多少个对象?

c++ - 如果继承,则无法使用初始化列表初始化结构?

symfony - 有没有办法将 EntityManager 注入(inject)服务

c++ - 重构从 std::container 继承的类

mysql - 使用 Docker 从 php 连接到 MySQL 服务器

php - 按时间段显示菜单 PHP PHP MySQL

mysql - MS ACCESS 合并到结果集

php - 登录表单未提交甚至未检查,但注册功能正常

symfony - FOSUserBundle:无法识别的字段:usernameCanonical