0

こんにちは、OneToOne の関係で少し問題が発生しています。

$userToView = $this->view->entityManager->getRepository("Ajfit\Entity\User")
                                            ->findOneByName($userName);

これは意図したとおりに入力されますが、プロキシ エンティティである engineFk と呼ばれるリレーショナル フィールドの識別子フィールドは [] に設定されていますが、値は正しく設定されています。以下を参照してください。

デバッグ対象エンティティ

私のユーザーエンティティはこれです:-

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;
}

私のエンジニアエンティティは次のようにセットアップされます:-

class Engineer extends PersistentObject
 {
 /**
  * @var integer $pk
  *
  * @ORM\Column(name="pk", type="integer")
  * @ORM\Id
  * @ORM\GeneratedValue(strategy="IDENTITY")
  */
 }
protected $pk;

そして、データベース内の私のSQLはこれです:-

/*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

この問題についての助けがあれば、大いに感謝します。

ありがとう

アンドリュー

4

2 に答える 2

1

間違ったエンティティで関係の所有側を定義していると思います。外部キーを所有するエンティティで定義する必要があります。私はアノテーションに慣れていないので、YAML を使用して関連付けを記述します。

したがって、Engineer エンティティの場合、次のようなものが必要です。

oneToOne:
    user:
        targetEntity: User
        inversedBy: engineer
        joinColumn:
            name: user_fk
            referencedColumnName: pk

次に、ユーザー エンティティの場合、構成は次のようになります。

oneToOne:
    engineer:
        targetEntity: Engineer
        mappedBy: user

詳しくはこちらをお読みください。

また、このような関連付けマッピングを使用すると、Doctrine 2 コンソール ツールはわずかに異なるエンティティ クラスを生成します。

于 2012-06-22T09:16:00.980 に答える
0

ほとんどの場合、遅延読み込みに関係しています。プロキシ オブジェクトは、使用を開始するまでロードされません。

于 2012-06-21T15:26:16.557 に答える