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

Symfony One-To-Many unidirectional relation without JOIN table

我有以下 tables:

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)

所有可本地化的文本都存储在一个 table 中,所有其他 table 都与该 table 相连。

不知道Country模型怎么写?这就是我到目前为止的方式。

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 实体中获取国家或任何实体。但我不想加入 table,因为它有点矫枉过正,而且完全没有意义。

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

Let's say that we have table A, table B, and table C.

然后是

you want the table A, table B, and table C having relation without JOIN

我告诉你,不可能。


为什么?

Actually, if table A, table B, and table C have a Relation,
it means that you are doing JOIN on your table.

您正在重新发明轮子,您必须使用 DoctrineExtensions / Translatable behavior 来完成所有工作:

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