[英]Optional ManyToOne relationship in Doctrine 2
我正在構建用於SNMP陷阱日志記錄的應用程序。 它有兩個MySQL表:一個帶有陷阱,一個帶有我要記錄的主機。
陷阱表在外部填充。 主機可以通過網站輸入。 主機可以有一個或多個陷阱。 一個陷阱可以有一個主機。
因此,這是多對一的關系,但雙方都是可選的。 由於Doctrine要求成員之一是主鍵,因此不能為空,因此我應如何實現呢?
這兩個類的代碼:
class Trap
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="eventname", type="string", length=50)
*/
private $eventname;
/**
* @var string
*
* @ORM\Column(name="eventid", type="string", length=50)
*/
private $eventid;
/**
* @var string
*
* @ORM\Column(name="trapoid", type="string", length=100)
*/
private $trapoid;
/**
* @var string
*
* @ORM\Column(name="enterprise", type="string", length=100)
*/
private $enterprise;
/**
* @var string
*
* @ORM\Column(name="community", type="string", length=20)
*/
private $community;
/**
* @var string
*
* @ORM\Column(name="hostname", type="string", length=255)
*/
private $hostname;
/**
* @var string
*
* @ORM\Column(name="agentip", type="string", length=16)
*/
private $agentip;
/**
* @var string
*
* @ORM\Column(name="category", type="string", length=20)
*/
private $category;
/**
* @var string
*
* @ORM\Column(name="severity", type="string", length=255)
*/
private $severity;
/**
* @var string
*
* @ORM\Column(name="uptime", type="string", length=20)
*/
private $uptime;
/**
* @var datetime
*
* @ORM\Column(name="traptime", type="datetime")
*/
private $traptime;
/**
* @var string
*
* @ORM\Column(name="formatline", type="string", length=255)
*/
private $formatline;
/**
* @ORM\ManyToOne(targetEntity="Host", inversedBy="traps")
* @ORM\JoinColumn(name="agentip", referencedColumnName="ip", nullable=true)
*/
protected $host;
}
class Host
{
/**
* @var string
* @ORM\Id
* @ORM\Column(name="ip", type="string", length=16)
*/
private $ip;
/**
* @ORM\Column(name="hostname", type="string", length=100)
*/
private $hostname;
/**
* @ORM\Column(name="type", type="string", length=100)
*/
private $type;
/**
* @ORM\Column(name="importance", type="integer", length=1)
*/
private $importance;
/**
* @ORM\OneToMany(targetEntity="Trap", mappedBy="host")
*/
protected $traps;
}
錯誤進行編輯該錯誤是我不允許刪除或截斷hosts表,這在我的應用程序中應該是可能的,因為陷阱必須能夠在沒有主機的情況下存在。
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`snmptt`.`snmptt`, CONSTRAINT `FK_9BF059B998B5BE9E` FOREIGN KEY (`agentip`) REFERENCES `hosts` (`ip`))
從評論中作為答案發布,認為是適當的答案;
“如果您嘗試將其作為直接續集刪除,那么是的,該錯誤是正確的,您無法在取消鏈接孩子之前刪除父項,如果沒有父項,那么先取消鏈接然后刪除就可以了”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.