我试图创建一个与另一个实体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;
}
答案 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;
}
我删除了cascade
和onDelete
,因为如果您通过Doctrine处理所有内容,它应该自动为您处理,但您仍然可以使用它们。我也只是按照你描述的方式将setter放在拥有实体上,但你也可以把它放回你的Estadi
实体上 - 这取决于你。