Rey*_*ier 5 mapping orm symfony doctrine-orm
我有两个实体:用户和公司,它们之间的关系是 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;
}
Run Code Online (Sandbox Code Playgroud)
在我的Company.php实体中,我有其他代码:
/**
* @ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="companies")
*/
protected $users;
public function __construct() {
$this->users = new \Doctrine\Common\Collections\ArrayCollection();
}
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误:
ContextErrorException:注意:未定义索引:inverseJoinColumns in /var/www/html/apps/portal_de_logistica/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 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;
Run Code Online (Sandbox Code Playgroud)
fos_user_user_has_company为n:m关系添加的表在哪里。
Company.php
/**
* @ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="companies")
*/
protected $users;
Run Code Online (Sandbox Code Playgroud)
现在错误是:
AnnotationException: [创建错误] 在属性 Application\Sonata\UserBundle\Entity\User::$companies 上声明的注释 @ORM\JoinTable 没有名为“JoinColumns”的属性。可用属性:名称、架构、joinColumns、inverseJoinColumns
任何?
您可能需要在定义 时指定joinColumns和。对于双向多对多定义是这样的,inverseJoinColumnsjoinTable
class User
{
// ...
/**
* Bidirectional - Many users have Many companies (OWNING SIDE)
*
* @ManyToMany(targetEntity="Company", inversedBy="users")
* @JoinTable(name="users_companies",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="company_id", referencedColumnName="id")}
* )
**/
private $companies;
public function __construct() {
$this->companies = new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
虽然您的公司类别应定义如下,
class Company
{
// ...
/**
* Bidirectional (INVERSE SIDE)
*
* @ManyToMany(targetEntity="User", mappedBy="companies")
*/
private $users;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6972 次 |
| 最近记录: |