[Doctrine][Symfony] 单个注释请求中的多个连接(可能吗?)
[Doctrine][Symfony] Multiple Joins in a single annotation request (is it possible ?)
我正在开发一个 Symfony 项目 (V3.4),我正在使用现有的数据库(无法更改)。
为了与之交互,我使用了学说注释,工作做得很好!
我设法使用 JoinTable 和 JoinColumns 提交请求,但最后一件事我不知道如何处理...
我有以下 tables :
tables
我有来自 table A 的 ID,我正在尝试从 E table 获得诽谤。
有没有办法使用注释来做到这一点?现在我已经在 3 table 秒之间完成了,但我不知道如何做更多 :
@ORM\ManyToMany(targetEntity="")
* @ORM\JoinTable(name="",joinColumns={@ORM\JoinColumn(
name="",referencedColumnName="")}, inverseJoinColumns={@ORM\JoinColumn(
name="",referencedColumnName="", unique=true)})
如果不可能,我愿意接受建议。
谢谢!
通过查看您的需求和架构,我可以告诉您您不需要多对多关系。您应该跨实体(tables)建立双向关系。
我不知道你现在是哪种关系,但假设是一对一的,你可以通过以下方式建立关系:
实体A
/**
* @OneToOne(targetEntity="EntityB", mappedBy="entityA")
*/
private $entityB;
实体B
/**
* @OneToOne(targetEntity="EntityA", inversedBy="entityB")
* @JoinColumn(name="entityA_id", referencedColumnName="id")
*/
private $entityA;
/**
* @OneToOne(targetEntity="EntityC", mappedBy="entityB")
*/
private $entityC;
实体C
/**
* @OneToOne(targetEntity="EntityB", inversedBy="entityC")
* @JoinColumn(name="entityB_id", referencedColumnName="id")
*/
private $entityB;
/**
* @OneToOne(targetEntity="EntityD", mappedBy="entityC")
*/
private $entityD;
实体D
/**
* @OneToOne(targetEntity="EntityC", inversedBy="entityD")
* @JoinColumn(name="entityC_id", referencedColumnName="id")
*/
private $entityC;
/**
* @OneToOne(targetEntity="EntityE", mappedBy="entityE")
*/
private $entityE;
实体E
/**
* @OneToOne(targetEntity="EntityD", inversedBy="entityE")
* @JoinColumn(name="entityD_id", referencedColumnName="id")
*/
private $entityD;
我没有时间测试它。但它应该是直截了当的。
您可以通过以下方式从 E table 获取诽谤:
$entityA = $entityRepositoryForA->find(a_id_here);
$entityA->getEntityB()->getEntityC()->getEntityD()->getEntityE->getLibelle();
我正在开发一个 Symfony 项目 (V3.4),我正在使用现有的数据库(无法更改)。 为了与之交互,我使用了学说注释,工作做得很好! 我设法使用 JoinTable 和 JoinColumns 提交请求,但最后一件事我不知道如何处理...
我有以下 tables :
tables
我有来自 table A 的 ID,我正在尝试从 E table 获得诽谤。
有没有办法使用注释来做到这一点?现在我已经在 3 table 秒之间完成了,但我不知道如何做更多 :
@ORM\ManyToMany(targetEntity="")
* @ORM\JoinTable(name="",joinColumns={@ORM\JoinColumn(
name="",referencedColumnName="")}, inverseJoinColumns={@ORM\JoinColumn(
name="",referencedColumnName="", unique=true)})
如果不可能,我愿意接受建议。
谢谢!
通过查看您的需求和架构,我可以告诉您您不需要多对多关系。您应该跨实体(tables)建立双向关系。
我不知道你现在是哪种关系,但假设是一对一的,你可以通过以下方式建立关系:
实体A
/**
* @OneToOne(targetEntity="EntityB", mappedBy="entityA")
*/
private $entityB;
实体B
/**
* @OneToOne(targetEntity="EntityA", inversedBy="entityB")
* @JoinColumn(name="entityA_id", referencedColumnName="id")
*/
private $entityA;
/**
* @OneToOne(targetEntity="EntityC", mappedBy="entityB")
*/
private $entityC;
实体C
/**
* @OneToOne(targetEntity="EntityB", inversedBy="entityC")
* @JoinColumn(name="entityB_id", referencedColumnName="id")
*/
private $entityB;
/**
* @OneToOne(targetEntity="EntityD", mappedBy="entityC")
*/
private $entityD;
实体D
/**
* @OneToOne(targetEntity="EntityC", inversedBy="entityD")
* @JoinColumn(name="entityC_id", referencedColumnName="id")
*/
private $entityC;
/**
* @OneToOne(targetEntity="EntityE", mappedBy="entityE")
*/
private $entityE;
实体E
/**
* @OneToOne(targetEntity="EntityD", inversedBy="entityE")
* @JoinColumn(name="entityD_id", referencedColumnName="id")
*/
private $entityD;
我没有时间测试它。但它应该是直截了当的。
您可以通过以下方式从 E table 获取诽谤:
$entityA = $entityRepositoryForA->find(a_id_here);
$entityA->getEntityB()->getEntityC()->getEntityD()->getEntityE->getLibelle();