我正在構建SNMP陷阱日誌記錄的應用程序。它有兩個MySQL表格:一個帶有陷阱,另一個帶有我想記錄的主機。Doctrine 2中的可選ManyToOne關係
陷阱表填充在外部。主持人可以通過網站進入。主機可以有一個或多個陷阱。一個陷阱可以有一臺主機。
所以這是一個多對一的關係,但雙方都是可選的。我如何實現這一點,因爲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`))
你的多對一關係對我來說看起來不錯你提出了什麼錯誤? – 2014-09-29 09:24:03
錯誤是我不允許刪除或截斷我的主機表,這應該可以在我的應用程序中使用,因爲陷阱必須能夠在沒有主機的情況下存在。 – 2014-09-29 09:28:44
如果你試圖刪除這個直接續集然後是錯誤是正確的你不能刪除父母之前,斷開孩子,如果沒有父母那麼這是好的,如果這樣先解除鏈接然後刪除 – 2014-09-29 09:35:54