【发布时间】:2014-03-12 13:06:10
【问题描述】:
我有两个实体:用户和公司,它们之间的关系是 n:m。在我的User.php 实体中,我有这个代码:
/**
* @ORM\ManyToMany(targetEntity="PL\CompanyBundle\Entity\Company", mappedBy="users", cascade={"all"})
*/
protected $companies;
public function __construct() {
$this->companies = new \Doctrine\Common\Collections\ArrayCollection();
}
public function setCompanies(\PL\CompanyBundle\Entity\Company $companies) {
$this->companies = $companies;
}
public function getCompanies() {
return $this->companies;
}
在我的Company.php 实体中,我还有其他代码:
/**
* @ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="companies")
*/
protected $users;
public function __construct() {
$this->users = new \Doctrine\Common\Collections\ArrayCollection();
}
但是我收到了这个错误:
ContextErrorException:注意:未定义的索引:inverseJoinColumns /var/www/html/apps/portal_de_logistica/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php 第 1041 行
映射有什么问题?
编辑重构代码
按照@ahmed-siouani 的指示,我进行了以下更改:
User.php
/**
* @ORM\ManyToMany(targetEntity="PL\CompanyBundle\Entity\Company", inversedBy="users")
* @ORM\JoinTable(name="fos_user_user_has_company",
* JoinColumns={@ORM\JoinColumn(name="fos_user_user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="company_id", referencedColumnName="id")}
* )
*/
protected $companies;
其中fos_user_user_has_company 是为n:m 关系添加的表。
Company.php
/**
* @ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="companies")
*/
protected $users;
现在错误是:
AnnotationException: [创建错误] 注解@ORM\JoinTable 财产申报 Application\Sonata\UserBundle\Entity\User::$companies 没有 名为“JoinColumns”的属性。可用属性:名称、模式、 joinColumns, inverseJoinColumns
有吗?
【问题讨论】:
标签: symfony orm doctrine-orm mapping