在我的模型中,我有
/**
* @ORM\Entity
* @ORM\HasLifecycleCallbacks()
*/
class Terrain
{
/**
* @var lots
*
* @ORM\OneToMany(targetEntity="Lot", mappedBy="terrain")
*/
private $lotes;
/**
* @ORM\PreRemove
*/
public function deleteAllLots()
{
$lots = $this->getLots();
foreach ($lots as $lot) {
$this->lots->removeElement($lot);
}
}
}
Run Code Online (Sandbox Code Playgroud)
/**
* @ORM\Entity
* @ORM\HasLifecycleCallbacks()
*/
class Lot
{
/**
* @var Terrain
*
* @ORM\ManyToOne(targetEntity="Terrain", inversedBy="lots")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="terrain_id", referencedColumnName="id")
* })
*/
var $terrain
}
Run Code Online (Sandbox Code Playgroud)
批量
我正在尝试删除地形,但之前我删除了与之相关的所有批次.当我尝试删除地形时,我收到一个错误SQLSTATE[23000]: Integrity constraint violation
小智 9
你仍然有一个参考的lots来terrain上删除,这就是为什么你有一个Integrity constrait violation.
试试这个 :
/**
* @ORM\Entity
* @ORM\HasLifecycleCallbacks()
*/
class Terrain
{
/**
* @var lots
*
* @ORM\OneToMany(targetEntity="Lot", mappedBy="terrain")
*/
private $lotes;
/**
* @ORM\PreRemove
*/
public function deleteAllLots()
{
$lots = $this->getLots();
foreach ($lots as $lot) {
$this->lots->removeElement($lot);
$lot->terrain = null; //$lot->setTerrain(null); will be better, try to add getters and setters
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果lots要从数据库中删除,则应使用关系cascade属性OneToMany(doctrine-project.com上的一对多引用),如下所示:
/**
* @ORM\Entity
* @ORM\HasLifecycleCallbacks()
*/
class Terrain
{
/**
* @var lots
*
* @ORM\OneToMany(targetEntity="Lot", mappedBy="terrain", cascade={"remove"})
*/
private $lotes;
}
Run Code Online (Sandbox Code Playgroud)
在Terrain删除,所有批次都将被删除.
| 归档时间: |
|
| 查看次数: |
4929 次 |
| 最近记录: |