簡體   English   中英

准則2中的可選ManyToOne關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM