所以,我刚刚开始研究symfony框架,我一直在努力弄清楚如何处理数据库中的一些关系。为了澄清,我正在为一个预先存在的游戏数据库制作一个管理面板,这个数据库有点乱,但我不能更改这个sql server数据库中的任何内容,否则游戏就会出现问题。
在我尝试将新的寄存器插入数据库之前,一切都很正常。如果我删除了关系,它会按预期工作,但如果我保留它并尝试注册新用户,我会收到以下消息:
SQLSTATE[23000]:[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]当identity_insert设置为OFF时,无法为表'users'中的标识列插入显式值。我还注意到它试图插入LoginUID,这是我表的自动递增索引键。
用户实体
class Users
{
/**
* @var int
*
* @ORMColumn(name="LoginUID", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="login", type="string", length=255)
*/
private $username;
/**
* @var string
*
* @ORMColumn(name="email", type="string", length=255)
*/
private $email;
/**
* @var string
*
* @ORMColumn(name="Connecting", type="integer")
*/
private $connecting;
/**
* @var string
*
* @ORMColumn(name="passwd", type="string", length=255)
*/
private $password;
/**
* @var integer
*
* @ORMColumn(name="sex", type="integer")
*/
private $sex;
/**
* @var DateTime
*
* @ORMColumn(name="firstlogin", type="datetime")
*/
private $firstlogin;
/**
* @var DateTime
*
* @ORMColumn(name="lastlogin", type="datetime")
*/
private $lastlogin;
/**
* @ORMOneToOne(targetEntity="UserAuth", fetch="EAGER")
* @ORMJoinColumn(name="LoginUID", referencedColumnName="LoginUID")
*/
private $userAuth = null;
/**
*
* @ORMOneToOne(targetEntity="UserNickname", fetch="EAGER")
* @ORMJoinColumn(name="LoginUID", referencedColumnName="LoginUID")
*/
private $nickname = null;
/**
* Get Id
*
* @return int
*/
public function getId()
{
return $this->id;
}
用户授权实体:
class UserAuth
{
/**
* @var int
*
* @ORMColumn(name="LoginUID", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var int
*
* @ORMColumn(name="AuthLevel", type="integer")
*
* @ORMOneToOne(targetEntity="Users")
*
* @ORMJoinColumn(name="LoginUID", referencedColumnName="LoginUID")
*/
private $authLevel;
/**
* @var bool
*
* @ORMColumn(name="IsReset", type="boolean")
*/
private $isReset;
/**
*
* @ORMOneToOne(targetEntity="UserNickname", fetch="EAGER")
*
* @ORMJoinColumn(name="LoginUID", referencedColumnName="LoginUID")
*/
private $nickname;
/**
*
* @ORMOneToOne(targetEntity="UserAuthDate", fetch="EAGER")
* @ORMJoinColumn(name="LoginUID", referencedColumnName="LoginUID")
*/
private $limitDate;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
用户实际上不需要在UserAuth中注册,这个表用于注册被禁止的用户和游戏大师,我想建立这个关联,这样我就可以获取用户auth和帐户数据,以便在表中显示它。任何帮助都将不胜感激。
编辑:我注意到问题似乎出在JoinColumn注释上,认为它实际上试图将UserAuth的LoginUID与dbo.users连接起来,有什么方法可以防止这种情况发生吗?我只想使用这个关系来检索用户身份验证。
我认为您的UserAuth
实体可能有问题。您的id
列命名为LoginUID
,但在One-to-one
关系中使用相同的名称。因此,我认为Doctrine试图在id
字段中设置nickname
值。您只需要在UserAuth
中绑定一个来自User
的字段。
{
/**
* @var int
* @ORMId
* @ORMOneToOne(targetEntity="Users", fetch="EAGER")
* @ORMJoinColumn(name="LoginUID", referencedColumnName="LoginUID") //from User
*/
private $id;
/**
*
* @ORMColumn(name="nickname")
*/
private $nickname;
EDIT:我修改了id
属性。这可能会起作用,JoinColumn
的属性name
必须引用UserAuth表中的列id名称。