没有 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 来完成所有工作:
- 处理模型修改,几乎就像您正在做的那样
- 获取时直接获取正确语言的字符串
- ...
我有以下 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
, andtable C
.
然后是
you want the
table A
,table B
, andtable C
having relation without JOIN
我告诉你,不可能。
为什么?
Actually, if
table A
,table B
, andtable C
have a Relation,
it means that you are doing JOIN on your table.
您正在重新发明轮子,您必须使用 DoctrineExtensions / Translatable behavior 来完成所有工作:
- 处理模型修改,几乎就像您正在做的那样
- 获取时直接获取正确语言的字符串
- ...