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;
我只是在写问题的时候才想到这个。。重新思考这个问题的好方法
干杯