php - Doctrine 在多用途表上收集多行(单向无连接表 ManyToMany?)

标签 php mysql symfony doctrine-orm doctrine

好吧,我在 Doctrine 的僵硬 table 上是这样的:

  • TextsRepo(language_id、text_id、文本)
  • SuchTable1 (such_id, title_text_id, another_text_id)
  • SuchTable2(such_id、header_text_idmeta_text_id)
  • ...

数据示例:

  • TextRepo -> (1, 1, "Lorem"), (2, 1, "Ipsum"), (3, 1, "Dolor"), (1, 2, "Sit"), ( 1, 3, "Amet"), (1, 4, "Consecteur"), 等等。
  • SuchTable1 -> (100, 1, 2), (102, 3, 4), (103, 4, 5), 等等
  • SuchTable1 -> (101, 6, 7), (102, 8, 9), (103, 10, 11), 等等

而且我需要从 text_id(在所有 languages_id 中)恢复所有行,就像在 DQL 中一样:

SELECT s, n FROM AppBundle:SuchTable1 s, JOIN **s.titles** WHERE s.such_id=100

并接收:{such_id => 100, title_text_id => 1, another_text_id => 2, titles => [{1, 1, "Lorem"}, {2, 1, "Ipsum"}, { 3, 1, "悲伤"}]

我看到的一个主要问题是,显然我不能将 title_text_idanother_text_id 作为 PK(例如)。

这个场景的问题是,是否可以通过映射关联恢复那些行?不使用第三个连接表,因为我无法更改结构。

最佳答案

是的,你可以这样映射它: (如果你想使用反面,请保留 '%optional: ... %' 注释内容,否则将其删除。)

class SuchTable1
{
    /**
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\TextIds"%optional: , inversedBy="suchTable1EntitiesWithThisAsTitle"%)
    * @ORM\JoinColumn(name="title_text_id")
    */
    private $title;

    /**
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\TextIds"%optional: , inversedBy="suchTable1EntitiesWithThisAsAnother")
    * @ORM\JoinColumn(name="another_text_id")
    */
    private $anotherText;
}

class SuchTable2
{
    /**
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\TextIds"%optional: , inversedBy="suchTable2EntitiesWithThisAsHeader")
    * @ORM\JoinColumn(name="header_text_id")
    */
    private $header;

    /**
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\TextIds"%optional: , inversedBy="suchTable2EntitiesWithThisAsMeta")
    * @ORM\JoinColumn(name="meta_text_id")
    */
    private $meta;
}

class TextRepo
{
    /**
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Languages"%optional: , inversedBy="texts")
    * @ORM\JoinColumn(name="language_id")
    */
    private $language

    /**
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\TextIds"%optional: , inversedBy="tranlastions")
    * @ORM\JoinColumn(name="text_id")
    */
    private $textId;

    private $text;
}

class TextIds
{
    /**
    * Optional :
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\TextRepo",mappedBy="textId")
    */
    private $translations;

    /**
    * Optional :
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\SuchTable1",mappedBy="title")
    */
    private $suchTable1EntitiesWithThisAsTitle;

    /**
    * Optional :
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\SuchTable1",mappedBy="anotherText")
    */
    private $suchTable1EntitiesWithThisAsAnother;

    /**
    * Optional :
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\SuchTable1",mappedBy="header")
    */
    private $suchTable2EntitiesWithThisAsHeader;

    /**
    * Optional :
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\SuchTable1",mappedBy="meta")
    */
    private $suchTable2EntitiesWithThisAsMeta;
}

关于php - Doctrine 在多用途表上收集多行(单向无连接表 ManyToMany?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38198900/

相关文章:

php - 如果我只有服务器 A 的 FTP 和 MySQL 用户/密码,我可以将 MySQL 数据库从服务器 A 移动到服务器 B 吗?

mysql - Eloquent Query 强制转换为 Float

mysql - 为什么 MariaDB 上的 CHECK 语句在 Windows 上有效,而在 Linux 上无效?

symfony - 如何在 Assetic 中使用变量

Symfony2 错误 500 而不是 404 在生产中

php - WooCommerce 结帐自定义字段条件验证

php - 如何使用 php 对数组求和?

javascript - 如何缩短重复的 javascript php 代码

mysql - 如何将字符串从特定的列和行移动到不同的列和行?

symfony - 用于在 Symfony 6 项目的 Twig 文件中自动完成 HTML 标记的 VS 代码扩展