因此,我刚刚开始研究symfony框架,并且一直在努力寻找如何处理数据库中已有关系的方法。为了明确起见,我正在为一个已有的游戏数据库创建一个管理面板,该数据库有些混乱,但是我无法更改此sql服务器数据库中的任何内容,否则游戏会出现问题。
一切正常,直到我尝试将新的寄存器插入数据库。如果删除该关系,它将按预期运行,但是如果保留该关系并尝试注册新用户,则会收到以下消息:
SQLSTATE [23000]:[Microsoft] [用于SQL Server的ODBC驱动程序11] [SQL Server]当IDENTITY_INSERT设置为OFF时,无法在表“用户”中为标识列插入显式值。我还注意到它尝试插入LoginUID,这是我表的自动增量索引键。
用户实体
class Users
{
/**
* @var int
*
* @ORM\Column(name="LoginUID", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="login", type="string", length=255)
*/
private $username;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255)
*/
private $email;
/**
* @var string
*
* @ORM\Column(name="Connecting", type="integer")
*/
private $connecting;
/**
* @var string
*
* @ORM\Column(name="passwd", type="string", length=255)
*/
private $password;
/**
* @var integer
*
* @ORM\Column(name="sex", type="integer")
*/
private $sex;
/**
* @var \DateTime
*
* @ORM\Column(name="firstlogin", type="datetime")
*/
private $firstlogin;
/**
* @var \DateTime
*
* @ORM\Column(name="lastlogin", type="datetime")
*/
private $lastlogin;
/**
* @ORM\OneToOne(targetEntity="UserAuth", fetch="EAGER")
* @ORM\JoinColumn(name="LoginUID", referencedColumnName="LoginUID")
*/
private $userAuth = null;
/**
*
* @ORM\OneToOne(targetEntity="UserNickname", fetch="EAGER")
* @ORM\JoinColumn(name="LoginUID", referencedColumnName="LoginUID")
*/
private $nickname = null;
/**
* Get Id
*
* @return int
*/
public function getId()
{
return $this->id;
}
用户身份验证实体:
class UserAuth
{
/**
* @var int
*
* @ORM\Column(name="LoginUID", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var int
*
* @ORM\Column(name="AuthLevel", type="integer")
*
* @ORM\OneToOne(targetEntity="Users")
*
* @ORM\JoinColumn(name="LoginUID", referencedColumnName="LoginUID")
*/
private $authLevel;
/**
* @var bool
*
* @ORM\Column(name="IsReset", type="boolean")
*/
private $isReset;
/**
*
* @ORM\OneToOne(targetEntity="UserNickname", fetch="EAGER")
*
* @ORM\JoinColumn(name="LoginUID", referencedColumnName="LoginUID")
*/
private $nickname;
/**
*
* @ORM\OneToOne(targetEntity="UserAuthDate", fetch="EAGER")
* @ORM\JoinColumn(name="LoginUID", referencedColumnName="LoginUID")
*/
private $limitDate;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
用户实际上并不需要在UserAuth中进行注册,该表用于注册被禁止的用户和游戏管理员,我想建立这种关联,以便可以将用户auth与帐户数据一起获取,以便将其显示在表格中。任何帮助将不胜感激。
编辑:我注意到该问题似乎与JoinColumn批注有关,认为它实际上是试图将dbo.users的UserAuth中的LoginUID加入,是否有任何方法可以防止它发生?我只想使用这种关系来检索用户身份验证。
答案 0 :(得分:0)
我认为您的UserAuth
实体可能有问题。
您的id
列名为LoginUID
,但是您在One-to-one
关系中使用了相同的名称。因此,我认为Doctrine尝试在nickname
字段中设置id
值。
您只需要绑定User
中UserAuth
中的一个字段即可。
{
/**
* @var int
* @ORM\Id
* @ORM\OneToOne(targetEntity="Users", fetch="EAGER")
* @ORM\JoinColumn(name="LoginUID", referencedColumnName="LoginUID") //from User
*/
private $id;
/**
*
* @ORM\Column(name="nickname")
*/
private $nickname;
编辑:我修改了id
属性。这可能有用,name
的属性JoinColumn
必须引用UserAuth表中的列ID名称。