Zend framework 一个实体的标识名设置为[],但值正确
您好,我与OneToOne关系有一个小问题,当运行以下命令时:-Zend framework 一个实体的标识名设置为[],但值正确,zend-framework,doctrine-orm,Zend Framework,Doctrine Orm,您好,我与OneToOne关系有一个小问题,当运行以下命令时:- $userToView = $this->view->entityManager->getRepository("Ajfit\Entity\User") ->findOneByName($userName); 这将按预期进行填充,但名为engineerFk的关系字段是一个代理实体,其标识符字段设置为[],但值设置正确,
$userToView = $this->view->entityManager->getRepository("Ajfit\Entity\User")
->findOneByName($userName);
这将按预期进行填充,但名为engineerFk的关系字段是一个代理实体,其标识符字段设置为[],但值设置正确,请参见以下内容:-
我的用户实体是:-
class User extends PersistentObject
{
/**
* @var integer $pk
*
* @ORM\Column(name="pk", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $pk;
/**
* @var integer $engineerFk
* @ORM\OneToOne(targetEntity="Ajfit\Entity\Engineer")
* @ORM\JoinColumn(name="pk", referencedColumnName="user_fk")
*/
protected $engineerFk;
}
/*user table*/
CREATE TABLE `user` (
`pk` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`pk`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
/*engineer table */
CREATE TABLE `engineer` (
`pk` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_fk` int(10) unsigned NOT NULL,
PRIMARY KEY (`pk`),
KEY `engineer_user_fk` (`user_fk`),
CONSTRAINT `engineer_user_fk` FOREIGN KEY (`user_fk`) REFERENCES `user` (`pk`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
我的工程师实体设置如下:-
class Engineer extends PersistentObject
{
/**
* @var integer $pk
*
* @ORM\Column(name="pk", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
}
protected $pk;
数据库中我的sql是:-
class User extends PersistentObject
{
/**
* @var integer $pk
*
* @ORM\Column(name="pk", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $pk;
/**
* @var integer $engineerFk
* @ORM\OneToOne(targetEntity="Ajfit\Entity\Engineer")
* @ORM\JoinColumn(name="pk", referencedColumnName="user_fk")
*/
protected $engineerFk;
}
/*user table*/
CREATE TABLE `user` (
`pk` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`pk`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
/*engineer table */
CREATE TABLE `engineer` (
`pk` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_fk` int(10) unsigned NOT NULL,
PRIMARY KEY (`pk`),
KEY `engineer_user_fk` (`user_fk`),
CONSTRAINT `engineer_user_fk` FOREIGN KEY (`user_fk`) REFERENCES `user` (`pk`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
任何有助于解决这个问题的人都会非常感激
谢谢
Andrew最有可能的是,这与延迟加载有关。在开始使用代理对象之前,不会加载它。我认为您在错误的实体上定义了关系的拥有方。它应该在拥有外键的实体上定义。 我不习惯使用注释,所以我将使用YAML来描述这种关联 因此,对于工程师实体,您应该有如下内容:
oneToOne:
user:
targetEntity: User
inversedBy: engineer
joinColumn:
name: user_fk
referencedColumnName: pk
然后,对于用户实体,配置应如下所示:
oneToOne:
engineer:
targetEntity: Engineer
mappedBy: user
详情请阅读
此外,通过这种关联映射,Doctrine 2控制台工具将生成稍微不同的实体类。映射不应该是
@ORM\JoinColumn(name=“user_pk”,referencedColumnName=“pk”)
?感谢您的评论,现在抛出:`SQLSTATE[42S22]:未找到列:1054“字段列表”中的未知列“u0_u.userfk”`有什么建议吗?但这就是问题所在,它无法加载,因为它无法识别字段名“[]”