2012-03-13 61 views
1

我正在开发一个使用symfony2并使用orm.yml文件将实体映射到数据库的应用程序。尝试为两个共享一对一关系的实体(Markagarria.php和GalderaPaketea.php)创建关系时会出现问题。当运行php app/console doctrine:schema:update --force时,它显示下一条消息:无需更新 - 您的数据库已与当前实体元数据同步。Symfony2 onetoone relationship

这是实体代码:

<?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 2012-03-13 11:27:55

+0

我正在使用phpmyadmin,设计器部分显示上述实体没有实际关系 – Haritz 2012-03-13 11:54:28

回答

4

它看起来像在实体GalderaPaketea应该是你的条目:

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

无论是实体声称所有权,以便不执行DB更新。

退房Doctrine Association mappings - OneToOne Bi-directional

我是新来的Symfony自己,我发现这个文档非常有帮助。