【问题标题】:Symfony2 Doctrine, joining tables by its foreign keySymfony2 Doctrine,通过外键连接表
【发布时间】:2014-04-11 21:25:34
【问题描述】:

我已经将两个表,其中包含给我的数据到 Symfony 数据库中,并希望通过外键连接这两个表。

Main 表包含以下列:ID、indate、dano、partno、batchno
Sub 有列:ID、main_id、rackno、code、qty

我想将表格以一对多的形式连接在一起(?),因为一个主可以有多个子。例如,一个 dano 可以有多个 rackno。我猜测表 Sub 中的 *main_id* 和表 Main 中的 id 是用于加入的键。

我如何将这两者与 Doctrine 结合起来?我有由它自己的实体文件分隔的表。

在 Main.php 上

class Main
{
/**
 * @var integer
 * @ORM\ManyToOne(targetEntity="Sub", mappedBy="mainId")
 */
private $id;

/**
 * @var \DateTime
 */
private $indate;

/**
 * @var string
 */
private $dano;

/**
 * @var string
 */
private $partno;

/**
 * @var integer
 */
private $batchno;

在 Sub.php 上:

class Sub
{
/**
 * @var integer
 */
private $id;

/**
 * @var integer
 * @ORM\ManyToOne(targetEntity="Main", inversedBy="id")
 * @ORM\JoinColumn(name="id", referencedColumnName="id")
 */
private $mainId;

/**
 * @var string
 */
private $rackno;

/**
 * @var string
 */
private $code;

/**
 * @var integer
 */
private $qty;

【问题讨论】:

    标签: php mysql sql symfony doctrine-orm


    【解决方案1】:

    你不能这样处理。如果你需要一个多对一关系,你需要这个:

    在您的主课中:

    /**
     * @ORM\OneToMany(targetEntity="Sub", mappedBy="main")
     */
    private $sub;
    

    在你的子类中:

    /**
     * @ORM\ManyToOne(targetEntity="Main", inversedBy="sub")
     * @ORM\JoinColumn(name="main_id", referencedColumnName="id")
     */
     private $main;
    

    别忘了同步你的数据库;)

    【讨论】:

    • 但是我想将 Sub 表中 main_id 中的数据与 Main 表中的 id 匹配。创建 $sub 和 $main 只会创建另一个包含空数据的列?
    • 在您的子表(实体子)中,您将有一个 main_id 字段将存储此 id。 Main 可以有很多 Sub 但 Sub 不能有很多 Main
    • @Nept 是正确的。我建议您在docs.doctrine-project.org/en/latest/reference/… 阅读有关关联映射的更多信息。
    猜你喜欢
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 2020-12-10
    • 2019-08-03
    • 2012-04-21
    • 1970-01-01
    • 2011-05-25
    • 2012-08-16
    相关资源
    最近更新 更多