Symfony2 映射一对多多音
Posted
技术标签:
【中文标题】Symfony2 映射一对多多音【英文标题】:Symfony2 mapping onetomany manytone 【发布时间】:2012-03-12 12:22:24 【问题描述】:我正在使用 symfony2 开发一个应用程序,并使用 orm.yml 文件将实体映射到数据库中。当试图为共享单对多关系的两个实体(Anotatzea.php 和 Dokumentua.php)创建数据库表时,就会出现问题。运行php app/console doctrine:schema:update --force
时会显示下一个错误
[RuntimeException]
The autoloader expected class "Anotatzailea\AnotatzaileaBundle\Entity\Anotatzea" to be defined in file "/var/www/Symfony/app/../src/Anotatzailea/AnotatzaileaBundle/Entity/Anotatzea.php". The file was found but the class was not in it, the class name or namespace probably has a typo.
实体的代码如下:
<?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\Dokumentua
*
* @ORM\Table(name="Dokumentua")
* @ORM\Entity
*/
class Dokumentua
/**
* @var integer $DokId
*
* @ORM\Column(name="DokId", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $DokId;
/**
* @var string $Izenburua
*
* @ORM\Column(name="Izenburua", type="string", length=30)
*/
private $Izenburua;
/**
* @var string $Egilea
*
* @ORM\Column(name="Egilea", type="string", length=40)
*/
private $Egilea;
/**
* @var date $ErregistroData
*
* @ORM\Column(name="ErregistroData", type="date")
*/
private $ErregistroData;
/**
* @var boolean $DokEgoera
*
* @ORM\Column(name="DokEgoera", type="boolean")
*/
private $DokEgoera;
/**
* @ORM\OneToMany(targetEntity="Anotatzea", mappedBy="Dokumentua")
*/
protected $Anotatzeak;
/**
* Get DokId
*
* @return integer
*/
public function getDokId()
return $this->DokId;
/**
* Set Izenburua
*
* @param string $izenburua
*/
public function setIzenburua($izenburua)
$this->Izenburua = $izenburua;
/**
* Get Izenburua
*
* @return string
*/
public function getIzenburua()
return $this->Izenburua;
/**
* Set Egilea
*
* @param string $egilea
*/
public function setEgilea($egilea)
$this->Egilea = $egilea;
/**
* Get Egilea
*
* @return string
*/
public function getEgilea()
return $this->Egilea;
/**
* Set ErregistroData
*
* @param date $erregistroData
*/
public function setErregistroData($erregistroData)
$this->ErregistroData = $erregistroData;
/**
* Get ErregistroData
*
* @return date
*/
public function getErregistroData()
return $this->ErregistroData;
/**
* Set DokEgoera
*
* @param boolean $dokEgoera
*/
public function setDokEgoera($dokEgoera)
$this->DokEgoera = $dokEgoera;
/**
* Get DokEgoera
*
* @return boolean
*/
public function getDokEgoera()
return $this->DokEgoera;
public function __construct()
$this->Anotatzeak = new ArrayCollection();
<?php
namespace Anotatzailea\AnotatzaileaBundle\Anotatzea;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Anotatzailea\AnotatzaileaBundle\Entity\Anotatzea
*
* @ORM\Table(name="Anotatzea")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class Anotatzea
/**
* @var integer $AnotId
*
* @ORM\Column(name="AnotId", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $AnotId;
/**
* @ORM\ManyToOne(targetEntity="Dokumentua", inversedBy="Anotatzeak")
* @ORM\JoinColumn(name="DokId", referencedColumnName="DokId")
*/
protected $Dokumentua;
/**
* Get AnotId
*
* @return integer
*/
public function getAnotId()
return $this->AnotId;
/**
* 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;
/**
* @ORM\prePersist
*/
public function setUpdatedValue()
// Add your code here
还有 orm.yml 文件:
Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua:
type: entity
table: Dokumentua
fields:
DokId:
type: integer
id: true
precision: 0
scale: 0
unique: false
nullable: false
generator:
strategy: IDENTITY
Izenburua:
type: string
length: 30
precision: 0
scale: 0
unique: false
nullable: false
Egilea:
type: string
length: 40
precision: 0
scale: 0
unique: false
nullable: false
ErregistroData:
type: date
precision: 0
scale: 0
unique: false
nullable: false
DokEgoera:
type: boolean
precision: 0
scale: 0
unique: false
nullable: false
OneToMany:
Anotatzeak:
targetEntity: Anotatzailea\AnotatzaileaBundle\Entity\Anotatzea
cascade:
mappedBy: Dokumentua
inversedBy: null
orphanRemoval: false
cascade: ["persist", "merge","remove"]
orderBy: null
lifecycleCallbacks:
Anotatzailea\AnotatzaileaBundle\Entity\Anotatzea:
type: entity
table: Anotatzea
fields:
AnotId:
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: Anotatzeak
joinColumns:
DokId:
referencedColumnName: DokId
orphanRemoval: false
lifecycleCallbacks:
【问题讨论】:
【参考方案1】:第二个实体文件中的命名空间名称错误。
替换:
namespace Anotatzailea\AnotatzaileaBundle\Anotatzea;
与:
namespace Anotatzailea\AnotatzaileaBundle\Entity;
【讨论】:
以上是关于Symfony2 映射一对多多音的主要内容,如果未能解决你的问题,请参考以下文章