【发布时间】:2016-05-21 22:09:51
【问题描述】:
我正在处理我的第一个可分发包,我对如何在我的包中重用“现有用户实体”有一些疑问。我的捆绑包的目的是将票证实体与用户实体相关联。
当 TargetEntity 的“referencedColumnName”与“id”不同时,我正在尝试将不同包之间的实体关联起来。
我正在关注Resolve Target Entity Docs 并且对我来说工作正常只有当“targetEntity”的主键被命名为“id”时。
例子:
// file: vendor\Kdrmklabs\Bundle\TicketBundle\Entity\Ticket.php
class Ticket {
/**
* @ORM\ManyToOne(targetEntity="\Kdrmklabs\Bundle\TicketBundle\Model\UserInterface")
*/
private $user;
}
// file: vendor\Kdrmklabs\Bundle\TicketBundle\Model\UserInterface.php;
interface UserInterface {
public function getId();
}
# file: app/config/config.yml
doctrine:
orm:
auto_mapping: true
resolve_target_entities:
Kdrmklabs\Bundle\TicketBundle\Model\UserInterface: AppBundle\Entity\User
如果实体AppBundle/Entity/User的主键命名为“id”,我的bundle和这个实体之间的关系正常。
// file: src/AppBundle/Entity/User.php
class User implements \Kdrmklabs\Bundle\TicketBundle\Model\UserInterface
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
}
否则,会发生异常:
// file: src/AppBundle/Entity/User.php
class User implements \Kdrmklabs\Bundle\TicketBundle\Model\UserInterface
{
/**
* @var integer
*
* @ORM\Column(name="id_customer", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
}
Column name 'id' referenced for relation from \Kdrmklabs\Bundle\TicketBundle\Entity\Ticket towards AppBundle\Entity\User does not exists.
我知道如果您在注释 @ORM\JoinColumn(referencedColumnName="id_of_the_external_user_entity") 中指定外键的值,这会很好用,但是从我的包中,我无法通过我的实际配置知道外键的名称。
有没有什么方法可以在两个实体之间建立关系,而不管这些主键的名称是什么?
也许我可以请求用户在 app/config/config.yml 中指定他“用户实体”的主键的名称,并以某种方式指定该值以创建正确的关系我的包的实体和安装我的包的用户的实体。但是,我该怎么做呢?
谢谢。 问候
非常感谢!
更多细节:
我的可分发包的存储库是:https://github.com/KdrMkLabs/TicketBundle
【问题讨论】:
标签: symfony doctrine-orm