Doctrine 使用“非”的多对多关系;id";学说中的主键

Doctrine 使用“非”的多对多关系;id";学说中的主键,doctrine,Doctrine,所以我想创建两个实体并进行多对多引用。我希望在一个表上使用字符串主键进行关联。这似乎真的很难,至少我花了相当多的时间尝试,但没有任何结果 这是我的方法: 第一实体: namespace Project\AdminBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="User") */ class User { /** * @ORM\Id * @

所以我想创建两个实体并进行多对多引用。我希望在一个表上使用字符串主键进行关联。这似乎真的很难,至少我花了相当多的时间尝试,但没有任何结果

这是我的方法:

第一实体:
namespace Project\AdminBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="User")
 */
class User
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $Id;

    /**
     * @ORM\ManyToMany(targetEntity="Role", inversedBy="Users")
     * @ORM\JoinTable(name="role_user",
     * joinColumns={@ORM\JoinColumn(name="User_Id", referencedColumnName="Id")},
     * inverseJoinColumns={@ORM\JoinColumn(name="Role_Name", referencedColumnName="Name")}
     * )
     */
    private $Roles;
}
第二点:
namespace Project\AdminBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="Role")
 */
class Role
{
    /**
     * @ORM\Id
     * @ORM\Column(type="string", length=256)
     */
    private $Name;

    /**
     * @ORM\ManyToMany(targetEntity="User", mappedBy="Roles")
     * @ORM\JoinTable(name="role_user",
     * joinColumns={@ORM\JoinColumn(name="Role_Name", referencedColumnName="Name")},
     * inverseJoinColumns={@ORM\JoinColumn(name="User_Id", referencedColumnName="Id")}
     * )
     */
    private $Users;
}
/app/console条令的输出:schema:validate

[Mapping]  FAIL - The entity-class 'Project\AdminBundle\Entity\User' mapping is invalid:
* The referenced column name 'Id' has to be a primary key column on the target entity class 'Project\AdminBundle\Entity\User'.
* The referenced column name 'Id' has to be a primary key column on the target entity class 'Project\AdminBundle\Entity\Role'.

我错过了什么?

注意大小写!条令按默认值将其列生成为小写。这就解决了问题:

 * joinColumns={@ORM\JoinColumn(name="User_Id", referencedColumnName="id")},
 * inverseJoinColumns={@ORM\JoinColumn(name="Role_Name", referencedColumnName="name")}
这太复杂了;将其放入
角色
实体就足够了:

/**
 * @ORM\ManyToMany(targetEntity="User", mappedBy="Roles")
 * @ORM\JoinColumn(name="role_user", referencedColumnName="name")
 */
private $Users;
我只是在写问题的时候才想到这个。。重新思考这个问题的好方法


干杯

注意大小写!条令按默认值将其列生成为小写。这就解决了问题:

 * joinColumns={@ORM\JoinColumn(name="User_Id", referencedColumnName="id")},
 * inverseJoinColumns={@ORM\JoinColumn(name="Role_Name", referencedColumnName="name")}
这太复杂了;将其放入
角色
实体就足够了:

/**
 * @ORM\ManyToMany(targetEntity="User", mappedBy="Roles")
 * @ORM\JoinColumn(name="role_user", referencedColumnName="name")
 */
private $Users;
我只是在写问题的时候才想到这个。。重新思考这个问题的好方法

干杯