Zend framework 一个实体的标识名设置为[],但值正确

Zend framework 一个实体的标识名设置为[],但值正确,zend-framework,doctrine-orm,Zend Framework,Doctrine Orm,您好,我与OneToOne关系有一个小问题,当运行以下命令时:- $userToView = $this->view->entityManager->getRepository("Ajfit\Entity\User") ->findOneByName($userName); 这将按预期进行填充,但名为engineerFk的关系字段是一个代理实体,其标识符字段设置为[],但值设置正确,

您好,我与OneToOne关系有一个小问题,当运行以下命令时:-

$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”`有什么建议吗?但这就是问题所在,它无法加载,因为它无法识别字段名“[]”