在OneToOne双向关系上映射doctrine时出错

时间:2016-02-24 17:49:28

标签: symfony doctrine-orm mapping

我试图创建一个与另一个实体1:1连接的实体。重点是,装备必须有一个Estadi,只有一个。我可以正确更新架构,数据库没问题,但在网页调试器上出现映射错误。

  

关联AppBundle \ Entity \ Equip#estadi指的是逆   侧场AppBundle \ Entity \ Estadi #nom,未定义为   关联。

     

关联AppBundle \ Entity \ Equip#estadi指的是逆   侧场AppBundle \ Entity \ Estadi #nom不存在

这是实体Estadi:

$filename= $_POST["ID"];
$dir = $filename;
$directories = array();
$files_list  = array();
$files = scandir($dir);
foreach($files as $file){
   if(($file != '.') && ($file != '..')){
      if(is_dir($dir.'/'.$file)){
         $directories[]  = $file;

      }else{
         $files_list[]    = $file;

      }
   }
}

foreach($directories as $directory){
                    ?>
                     <div class="a_folder" id="<?php echo $directory ?>">
                     <div class="a_file_icon"></div>
                     <div class="a_file_name"><?php echo $directory ?></div>
                     <div class="a_file_size"></div>
                     <div class="a_file_last"><?php echo date ("Y-m-d  H:i:s.", filemtime('./files/' . $directory)) ?></div>
                     </div>
                    <?php
}
foreach($files_list as $file_list){
                    ?>
                     <div class="a_file">
                     <div class="a_file_icon_file"></div>
                     <div class="a_file_name"><?php echo $file_list ?></div>
                     <div class="a_file_size"><?php echo FileSizeConvert(filesize('./files/' . $file_list)); ?></div>
                     <div class="a_file_last"><?php echo date ("Y-m-d  H:i:s.", filemtime('./files/' . $file_list)) ?></div>
                     </div>
                    <?php
}

这是实体装备:

/**
* @ORM\Entity
* @ORM\Table(name="estadis")
*/

class Estadi{
    /**
    * @ORM\Column(type="string",length=30)
    * @ORM\OneToOne(targetEntity="Equip",mappedBy="estadi",cascade={"persist"})
    * @ORM\Id
    */
    protected $nom;

    /**
    * @ORM\Column(type="integer")
    */
    protected $aforament;

    /**
    * @ORM\Column(type="integer")
    */
    protected $num_portes;

    /**
    * @ORM\Column(type="string",length=50)
    */
    protected $direccio;

    /**
    * @ORM\Column(type="string", length=4)
    */
    protected $any_construccio;

    /**
    * @ORM\Column(type="string", length=30)
    */
    protected $nom_aficio;
}

1 个答案:

答案 0 :(得分:2)

定义@OneToOne注释时,它不应位于主键上。拥有实体应包含单个关联(单向),或者每个实体应包含与另一个实体的关联 - 作为实体,不连接到主键。

您的Equip映射应该如下所示:

/**
 * @ORM\OneToOne(targetEntity="Estadi", inversedBy="equip")
 * @ORM\JoinColumn(name="nom_estadi", referencedColumnName="nom")
 */
protected $estadi;

public function setEstadi(Estadi $estadi)
{
    $this->estadi = $estadi;

    return $this;
}

public function getEstadi()
{
    return $this->estadi;
}

您的Estadi映射应该如下所示:

/**
 * @OneToOne(targetEntity="Equip", mappedBy="estadi")
 */
protected $equip;

public function getEquip(Equip $equip)
{
    return $this->equip;
}

我删除了cascadeonDelete,因为如果您通过Doctrine处理所有内容,它应该自动为您处理,但您仍然可以使用它们。我也只是按照你描述的方式将setter放在拥有实体上,但你也可以把它放回你的Estadi实体上 - 这取决于你。