我有两个表/实体client
和site
,它们通过连接表client_site
组合成多对多关系。以下是我的实体设置方式。
这是客户表实体
/**
* @Entity
* @Table(name="client")
*/
class Client
{
/**
* @Id @Column(type="bigint")
* @GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ManyToMany(targetEntity="Site", inversedBy="clients")
* @JoinTable(name="client_site",
* joinColumns={@JoinColumn(name="c_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="s_id", referencedColumnName="id")}
* )
*/
private $sites;
以及网站表实体
/**
* @Entity
* @Table(name="site")
*/
class Site
{
/**
* @Id @Column(type="bigint")
* @GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ManyToMany(targetEntity="Client", mappedBy="sites")
*/
private $clients;
这是client_site表实体
/**
* @Entity
* @Table(name="client_site",indexes={@index(name="FK_client_site",columns={"c_id"}),@index(name="FK_client_site_2",columns={"s_id"})})
*/
class ClientSite
{
/**
* @Id
* @ManyToOne(targetEntity="Client", inversedBy="ClientSite")
*/
private $client;
/**
* @Id
* @ManyToOne(targetEntity="Site", inversedBy="ClientSite")
*/
private $site;
这是我尝试运行的查询
$query = Zend_Registry::get('em')
->createQuery('SELECT c, s
FROM Application\Models\Client c
JOIN c.sites s
WHERE c.is_active = 1');
$clients = $query->getResult();
这是我的错误
No identifier/primary key specified for Entity 'Application\Models\ClientSite'. Every Entity must have an identifier/primary key.
我将@Id放在ClientSite实体的两个字段中,因为它们是我的joiner表的复合主键。这可以不在Doctrine2中完成吗?如果不能,我的替代选择是什么。
如果你能做到这一点,我做错了什么?
答案 0 :(得分:1)
Doctrine 2目前不支持此功能。
但是,他们在实验分支中working on adding support for this。显然,如果它没有问题,它可能会包含在2.1版本中。