2012-03-13 14 views
1

symfony2を使ってアプリケーションを開発し、orm.ymlファイルを使ってエンティティをデータベースにマッピングします。この問題は、onetoone関係(Markagarria.phpとGalderaPaketea.php)を共有する2つのエンティティの関係を作成しようとするときに発生します。 php app/console doctrine:schema:update --forceを実行すると、次のメッセージが表示されます。更新するものはありません - データベースは、現在のエンティティメタデータとすでに同期しています。Symfony2 onetooneの関係

これは、エンティティのためのコードです:

<?php 

namespace Anotatzailea\AnotatzaileaBundle\Entity; 

use Symfony\Component\Validator\Mapping\ClassMetadata; 
use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* Anotatzailea\AnotatzaileaBundle\Entity\Markagarria 
* 
* @ORM\Table(name="Markagarria") 
* @ORM\Entity 
* @ORM\HasLifecycleCallbacks 
*/ 
class Markagarria 
{ 
    /** 
    * @var integer $MarkId 
    * 
    * @ORM\Column(name="MarkId", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $MarkId; 

    /** 
    * @ORM\ManyToOne(targetEntity="Dokumentua", inversedBy="Markagarriak") 
    * @ORM\JoinColumn(name="DokId", referencedColumnName="DokId") 
    */ 
    protected $Dokumentua; 

    /** 
    * @ORM\oneToOne(targetEntity="GalderaPaketea", mappedBy="Markagarria") 
    */ 
    private $GalderaPaketea; 

    /** 
    * Get MarkId 
    * 
    * @return integer 
    */ 
    public function getMarkId() 
    { 
     return $this->MarkId; 
    } 

    /** 
    * Set GalderaPaketea 
    * 
    * @param Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea $galderaPaketea 
    */ 
    public function setGalderaPaketea(\Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea $galderaPaketea) 
    { 
     $this->GalderaPaketea = $galderaPaketea; 
    } 

    /** 
    * Get GalderaPaketea 
    * 
    * @return Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea 
    */ 
    public function getGalderaPaketea() 
    { 
     return $this->GalderaPaketea; 
    } 

    /** 
    * Set Dokumentua 
    * 
    * @param Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua $dokumentua 
    */ 
    public function setDokumentua(\Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua $dokumentua) 
    { 
     $this->Dokumentua = $dokumentua; 
    } 

    /** 
    * Get Dokumentua 
    * 
    * @return Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua 
    */ 
    public function getDokumentua() 
    { 
     return $this->Dokumentua; 
    } 
} 

<?php 

namespace Anotatzailea\AnotatzaileaBundle\Entity; 

use Symfony\Component\Validator\Mapping\ClassMetadata; 
use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea 
* 
* @ORM\Table(name="GalderaPaketea") 
* @ORM\Entity 
*/ 
class GalderaPaketea 
{ 
    /** 
    * @var integer $GalPakId 
    * 
    * @ORM\Column(name="GalPakId", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $GalPakId; 

    /** 
    * @var integer $BalidatzeEginak 
    * 
    * @ORM\Column(name="BalidatzeEginak", type="integer") 
    */ 
    private $BalidatzeEginak; 

    /** 
    * @var integer $InterpretatzeEginak 
    * 
    * @ORM\Column(name="InterpretatzeEginak", type="integer") 
    */ 
    private $InterpretatzeEginak; 

    /** 
    * @var boolean $PaketeEgoera 
    * 
    * @ORM\Column(name="PaketeEgoera", type="boolean") 
    */ 
    private $PaketeEgoera; 

    /** 
    * @ORM\oneToOne(targetEntity="Markagarria", mappedBy="GalderaPaketea") 
    * @ORM\JoinColumn(name="MarkId", referencedColumnName="MarkId") 
    */ 
    private $Markagarria; 

    /** 
    * Get GalPakId 
    * 
    * @return integer 
    */ 
    public function getGalPakId() 
    { 
     return $this->GalPakId; 
    } 

    /** 
    * Set BalidatzeEginak 
    * 
    * @param integer $balidatzeEginak 
    */ 
    public function setBalidatzeEginak($balidatzeEginak) 
    { 
     $this->BalidatzeEginak = $balidatzeEginak; 
    } 

    /** 
    * Get BalidatzeEginak 
    * 
    * @return integer 
    */ 
    public function getBalidatzeEginak() 
    { 
     return $this->BalidatzeEginak; 
    } 

    /** 
    * Set InterpretatzeEginak 
    * 
    * @param integer $interpretatzeEginak 
    */ 
    public function setInterpretatzeEginak($interpretatzeEginak) 
    { 
     $this->InterpretatzeEginak = $interpretatzeEginak; 
    } 

    /** 
    * Get InterpretatzeEginak 
    * 
    * @return integer 
    */ 
    public function getInterpretatzeEginak() 
    { 
     return $this->InterpretatzeEginak; 
    } 

    /** 
    * Set PaketeEgoera 
    * 
    * @param boolean $paketeEgoera 
    */ 
    public function setPaketeEgoera($paketeEgoera) 
    { 
     $this->PaketeEgoera = $paketeEgoera; 
    } 

    /** 
    * Get PaketeEgoera 
    * 
    * @return boolean 
    */ 
    public function getPaketeEgoera() 
    { 
     return $this->PaketeEgoera; 
    } 

    /** 
    * Set Markagarria 
    * 
    * @param Anotatzailea\AnotatzaileaBundle\Entity\Markagarria $markagarria 
    */ 
    public function setMarkagarria(\Anotatzailea\AnotatzaileaBundle\Entity\Markagarria $markagarria) 
    { 
     $this->Markagarria = $markagarria; 
    } 

    /** 
    * Get Markagarria 
    * 
    * @return Anotatzailea\AnotatzaileaBundle\Entity\Markagarria 
    */ 
    public function getMarkagarria() 
    { 
     return $this->Markagarria; 
    } 
} 

そしてorm.ymlファイルは、以下の内容が含まれています。

Anotatzailea\AnotatzaileaBundle\Entity\Markagarria: 
    type: entity 
    table: Markagarria 
    fields: 
    MarkId: 
     type: integer 
     id: true 
     precision: 0 
     scale: 0 
     unique: false 
     nullable: false 
     generator: 
     strategy: IDENTITY 
    manyToOne: 
    Dokumentua: 
     targetEntity: Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua 
     cascade: { } 
     mappedBy: null 
     inversedBy: Markagarriak 
     joinColumns: 
     DokId: 
      referencedColumnName: DokId 
     orphanRemoval: false 
    oneToOne: 
    GalderaPaketea: 
     targetEntity: Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea 
     cascade: { } 
     mappedBy: Markagarria 
    lifecycleCallbacks: { } 

Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea: 
    type: entity 
    table: GalderaPaketea 
    fields: 
    GalPakId: 
     type: integer 
     id: true 
     precision: 0 
     scale: 0 
     unique: false 
     nullable: false 
     generator: 
     strategy: IDENTITY 
    BalidatzeEginak: 
     type: integer 
     precision: 0 
     scale: 0 
     unique: false 
     nullable: false 
    InterpretatzeEginak: 
     type: integer 
     precision: 0 
     scale: 0 
     unique: false 
     nullable: false 
    PaketeEgoera: 
     type: boolean 
     precision: 0 
     scale: 0 
     unique: false 
     nullable: false 
    oneToOne: 
    Markagarria: 
     targetEntity: Anotatzailea\AnotatzaileaBundle\Entity\Markagarria 
     cascade: { } 
     mappedBy: GalderaPaketea 
     joinColumn: 
     name: MarkId 
     referencedColumnName: MarkId 
    lifecycleCallbacks: { } 
+0

コード内にリレーションを使用してみましたか? ($ obj-> getGalderaPaketea())。データベースが実際に更新された可能性があります。 – Tool

+0

私はphpmyadminを使用していますが、デザイナーのセクションには上記のエンティティの実際の関係は示されていません – Haritz

答えて

4

それはGalderaPaketeaがあるべきエンティティであなたのエントリのようになります。

/** 
* @ORM\oneToOne(targetEntity="Markagarria", inversedBy="GalderaPaketea") 
* @ORM\JoinColumn(name="MarkId", referencedColumnName="MarkId") 
*/ 

いずれのエンティティも所有権を主張していないため、dbの更新は実行されません。

は私が自分自身のSymfonyに新たなんだと私は、この文書が非常に役に立ったDoctrine Association mappings - OneToOne Bi-directional

をチェックしてください。

関連する問題