Symfony2,条令多通关系错误
我正在尝试使用Symfony2和条令建立一个在某个站点上执行的一些操作的日志。我有2个表、站点和日志。Logs表将包含一个siteid,它是sites表的id列的外键。Logs表可以包含同一站点的多个日志 当我尝试在日志表中插入条目时,我得到的siteid为null错误 这是我的密码: 网站实体:Symfony2,条令多通关系错误,symfony,doctrine-orm,Symfony,Doctrine Orm,我正在尝试使用Symfony2和条令建立一个在某个站点上执行的一些操作的日志。我有2个表、站点和日志。Logs表将包含一个siteid,它是sites表的id列的外键。Logs表可以包含同一站点的多个日志 当我尝试在日志表中插入条目时,我得到的siteid为null错误 这是我的密码: 网站实体: <?php namespace A\SHB\Entity; use Doctrine\ORM\Mapping as ORM; /** * Sites * * @ORM\Table()
<?php
namespace A\SHB\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Sites
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="A\SHB\Entity\SitesRepository")
*/
class Sites
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var ArrayCollection $siteLog
*
* @ORM\OneToMany(targetEntity="Logs", mappedBy="log", cascade={"persist"})
* @ORM\OrderBy({"siteid" = "ASC"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="log_id", referencedColumnName="siteid")
* })
*/
private $siteLog;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Constructor
*/
public function __construct()
{
$this->siteLog = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add siteLog
*
* @param \A\SHB\Entity\SiteLog $siteLog
* @return Sites
*/
public function addSiteLog(\A\SHB\Entity\SiteLog $siteLog)
{
$this->siteLog[] = $siteLog;
return $this;
}
/**
* Remove siteLog
*
* @param \A\SHB\Entity\SiteLog $siteLog
*/
public function removeSiteLog(\A\SHB\Entity\SiteLog $siteLog)
{
$this->siteLog->removeElement($siteLog);
}
/**
* Get siteLog
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getSiteLog()
{
return $this->siteLog;
}
}
现在,当我运行此代码时,出现以下错误:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'siteid' cannot be null"
如果在$em->persist($log)之前我变量转储$log
代码>,站点ID在那里。我不确定哪里出了问题,也不知道为什么siteid设置为null
更新1:
我尝试进行以下更改,但仍然得到相同的错误:
/**
* @var Log
*
* @ORM\ManyToOne(targetEntity="Sites", inversedBy="siteLog")
*/
private $log;
OneToMany不需要JoinColumn。因此,根据研究报告,它看起来应该是这样的
为了简单起见,orderBy和cascade被忽略了。您的结构有问题
从日志实体中删除此项
/**
* @var integer
*
* @ORM\Column(name="siteid", type="integer")
*/
private $siteid;
然后更换这个零件
/**
* @var Log
*
* @ORM\ManyToOne(targetEntity="Sites")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="site_id", referencedColumnName="id")
* })
*/
private $log;
与
在您的站点中,将此实体替换为
/**
* @var ArrayCollection $siteLog
*
* @ORM\OneToMany(targetEntity="Logs", mappedBy="logs", cascade={"persist"})
* @ORM\OrderBy({"siteid" = "ASC"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="log_id", referencedColumnName="siteid")
* })
*/
private $logs;
与
然后对这些新的feilds使用适当的setter和getter,即将对象传递给setter函数,对于它们映射到的类(如果您不知道这部分,请在注释中写入,我也会这样做)同样的问题?ypu不需要在日志中明确定义siteid,如果加入了doctrine,那么他们自己就会这样做。我这样做了,但仍然会得到相同的错误。请参阅问题中的“我的更新”。抱歉,引用了错误注释。我根据文档用一个例子编辑了答案。
/**
* @var integer
*
* @ORM\Column(name="siteid", type="integer")
*/
private $siteid;
/**
* @var Log
*
* @ORM\ManyToOne(targetEntity="Sites")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="site_id", referencedColumnName="id")
* })
*/
private $log;
/**
* @var Log
*
* @ORM\ManyToOne(targetEntity="Sites" inversedBy="logs")
*/
private $site;
/**
* @var ArrayCollection $siteLog
*
* @ORM\OneToMany(targetEntity="Logs", mappedBy="logs", cascade={"persist"})
* @ORM\OrderBy({"siteid" = "ASC"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="log_id", referencedColumnName="siteid")
* })
*/
private $logs;
/**
* @var ArrayCollection $siteLog
*
* @ORM\OneToMany(targetEntity="Logs", mappedBy="site", cascade={"persist"})
* @ORM\OrderBy({"siteid" = "ASC"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="log_id", referencedColumnName="id")
* })
*/
private $logs;