当前位置: 首页 > 知识库问答 >
问题:

未定义索引:尝试定义两个实体之间的多个关系时使用inverseJoinColumns

隆向晨
2023-03-14

我有两个实体:用户和公司,它们之间的关系是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;
}
/**
 * @ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="companies")
 */
protected $users;

public function __construct() {
    $this->users = new \Doctrine\Common\Collections\ArrayCollection();
}

映射出了什么问题?

编辑重构代码

根据@Ahmed-Siouani的指示,我做了以下更改:

/**
 * @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;
/**
 * @ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="companies")
 */
protected $users;

共有1个答案

裴嘉良
2023-03-14

在定义jointable时,可能需要指定joincolumnsinversejoincolumns。因为双向多对多定义是类似的,

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();
    }

    // ...
}

虽然您的Company类应定义如下,

class Company
{
    // ...

    /**
     * Bidirectional (INVERSE SIDE)
     *
     * @ManyToMany(targetEntity="User", mappedBy="companies")
     */
    private $users;
 类似资料:
  • 如何为这种多对多关系分配默认值?制作两个关联表->一个用于收件箱-关系,另一个用于发件箱-关系会更好吗?我该如何做到这一点?这个问题的其他解决方案? 任何帮助都非常感谢--非常感谢!

  • 问题内容: 我的Spring-Boot应用程序中有两个实体: User.java 和 角色.java 对于我的MySql数据库 我已经排除了此问题的getter和setter方法。 我想实现两个实体之间 的多对多关系 。每个用户都应该能够为其分配多个角色 我已经为数据库中的两个表创建了一个映射表。它有行 用户身份 role_id。 我还创建了一个新的Entity UserRole.java ,如下

  • 我的Spring Boot应用程序中有两个实体: 使用者JAVA 和 Role.java 我的MySql数据库 我已经排除了这个问题的getter和setter方法。 我想实现两个实体之间的多对多关系。每个用户都应该能够为自己分配多个角色 我已经在我的数据库中为这两个表创建了一个映射表。它有几排 用户id 我还创建了一个新的实体UserRole。java,如下所示: 现在我的问题是:这种构造正确吗

  • itemdao.java posDatabase.java invoice.java 错误:错误:查询返回的列在com.example.qrreceipt.Item中没有字段[item_id,price],即使它们被注释为非空或原语。查询返回的列:[invoice_id,terminal_no,cashier_name]

  • 我开始使用Room数据库并通过几个文档来创建房间实体。这些是我的关系。聊天频道可以有很多对话。所以这是一对多的关系。因此我创建了如下实体。 渠道实体 会话实体 现在,您可以看到,对话属于一个频道。当用户看到频道列表时,我需要在列表项中显示上次对话的几个属性。我的问题是,如果我只是像上面那样声明关系,或者应该在通道类中包含会话对象,这就足够了吗?我还有什么其他方法可以处理它?因为当用户滚动时,UI需

  • 我试图使用code runner在visual studio代码中编译一个带有experimental::filesystem的项目,但是我甚至无法在终端中编译它。 代码如下,文档中的一个非常简单的测试用法: 使用编译 在code-runner配置中或使用just in-terminal通常无法编译或无法工作。 它提供的错误是: 如果有任何帮助,我将不胜感激。我正在运行linux,并且已经检查过l