没有JOIN表的{Symfony一对多单向关系

时间:2017-07-06 14:57:27

标签: php postgresql symfony doctrine-orm doctrine-mapping

我有以下表格:

strings
------
"id" int not null primary key

string_texts
------
"id"          int not null primary key
"string_id"   int not null fk(strings.id)
"language_id" int not null fk(languages.id)
"text"        text

"countries"
------
"id"      int not null primary key,
"name_id" int not null fk(strings.id)

所有可本地化的文本存储在单个表中,并且每个其他表都连接到该表。

我不知道如何编写国家模型?这就是我到目前为止的方式。

namespace LoginHood\HoodBundle\Entity\Geo;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

class Country
{
    /**
     * @var int
     *
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     */
    protected $id;

    /**
     * @var Collection
     *
     * @ORM\OneToMany(targetEntity="StringText", mappedBy="")
     */
    protected $names;

    /*
    ...
    */


    public function __construct()
    {
        $this->names = new ArrayCollection();
    }
}

由于结构原因,您无法从StringText实体获取Country或任何实体。但是我不想做一个连接表,因为它有点过分,而且完全没有意义。

2 个答案:

答案 0 :(得分:0)

我想向你解释一些你应该知道的事情。

  

假设我们有table Atable Btable C

然后

  

您希望table Atable Btable C 关系而不使用加入

我会告诉你它不可能。


为什么?

  

实际上,如果table Atable Btable C关系,   这意味着你在桌子上做 JOIN

答案 1 :(得分:0)

你正在重新发明轮子,你必须使用DoctrineExtensions / Translatable behavior来完成整个工作:

  • 处理模型修改,几乎就像你正在做的那样
  • 在获取字符串时,使用正确的语言直接获取字符串
  • ...