【发布时间】:2016-03-13 11:07:19
【问题描述】:
我有 fos_user 实体,该实体与 oneToOne 和 reservedArea 实体相关。
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToOne(targetEntity="ReservedAreaBundle\Entity\ReservedArea", cascade={"persist"})
* @ORM\JoinColumn(name="reserved", referencedColumnName="id", onDelete="SET NULL")
*/
protected $reserved;
public function __construct()
{
parent::__construct();
}
public function getReserved()
{
return $this->reserved;
}
public function setReserved($reserved)
{
$this->reserved = $reserved;
}
}
在我的 reservedArea 实体中,我只有一个与 File 实体的 OneToMany 关系。
class ReservedArea
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="ReservedAreaBundle\Entity\File", mappedBy="reserved_area", cascade={"persist"})
*/
protected $file;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Constructor
*/
public function __construct()
{
$this->file = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add file
*
* @param \ReservedAreaBundle\Entity\File $file
*
* @return ReservedArea
*/
public function addFile(\ReservedAreaBundle\Entity\File $file)
{
$this->file[] = $file;
return $this;
}
/**
* Remove file
*
* @param \ReservedAreaBundle\Entity\File $file
*/
public function removeFile(\ReservedAreaBundle\Entity\File $file)
{
$this->file->removeElement($file);
}
/**
* Get file
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getFile()
{
return $this->file;
}
}
在我的文件实体中,我只有一个简单的字符串。
class File
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $file;
/**
* @ORM\ManyToOne(targetEntity="ReservedAreaBundle\Entity\ReservedArea", inversedBy="file")
* @ORM\JoinColumn(name="reserved_area", referencedColumnName="id")
*/
protected $reservedArea;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set reservedArea
*
* @param \ReservedAreaBundle\Entity\ReservedArea $reservedArea
*
* @return File
*/
public function setReservedArea(\ReservedAreaBundle\Entity\ReservedArea $reservedArea = null)
{
$this->reservedArea = $reservedArea;
return $this;
}
/**
* Get reservedArea
*
* @return \ReservedAreaBundle\Entity\ReservedArea
*/
public function getReservedArea()
{
return $this->reservedArea;
}
/**
* Set file
*
* @param string $file
*
* @return File
*/
public function setFile($file)
{
$this->file = $file;
return $this;
}
/**
* Get file
*
* @return string
*/
public function getFile()
{
return $this->file;
}
现在如果我尝试访问用户文件做类似的事情:
$files = $this->getUser()->getReserved()->getFile();
foreach($files as $file) {
var_dump($file); //or $file->getFile();
}
我得到一个错误:
注意:未定义索引:reserved_area
在我的数据库中,我添加了一个具有保留区域和两个文件的用户,如果我直接制作:
SELECT u.username, f.file FROM fos_user u INNER JOIN reserved_area r ON u.reserved=r.id INNER JOIN reserved_area_file f ON f.reserved_area=r.id;
我得到了正确的结果。
我哪里出错了?
感谢您的建议。
【问题讨论】:
标签: php doctrine-orm symfony