簡體   English   中英

原則一對多關聯:復合主鍵問題

[英]Doctrine one-to-many association: Issues with composite primary key

我正在嘗試填充以下一對多的教義關聯,但是我遇到了一個問題,因為每個客戶 (主鍵: id )的訪問(主鍵: customer_idvisitday )都在“ 訪問”表中捕獲了(我派生visitday自2000年1月1日以來一直保留到數據庫的天數(因為datetime對象不能在主鍵中):

實體

class Customer
{
    /**
     * @ORM\Column(type="integer", options={"unsigned"=true})
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\OneToMany(targetEntity="Visit", mappedBy="visitday")
     */
    protected $visits;

    public function __construct()
    {
        $this->visits = new ArrayCollection();
    }
     /* -- */
}


Class Visit
{

    /**
     * @ORM\Column(name="customer_id", type="integer", options={"unsigned"=true})
     * @ORM\JoinColumn(name="customer_id", referencedColumnName="id")
     * @ORM\Id
     */
    private $customer;

    /**
     * @ORM\Column(type="smallint")
     * @ORM\ManyToOne(targetEntity="Customer", inversedBy="visits")
     * @ORM\JoinColumn(name="visitday", referencedColumnName="id")
     * @ORM\Id
     */
    protected $visitday;

     /* -- */
}

我的問題是我的客戶對象未填充客戶的相應訪問。 我認為這是因為教義無法看到它還應該在查詢中包含其自己的客戶ID。 有沒有辦法解決這個問題?

我建議您將$ visitday屬性更改為DateTime。 這將是您的訪問日期時間戳。 然后,客戶屬性應與訪問次數成反比。

/**
 * @ORM\Column(name="customer_id", type="integer", options={"unsigned"=true})
 * @ORM\ManyToOne(targetEntity="Customer", inversedBy="visits")
 * @ORM\Id
 */
private $customer;

作為一種選擇,您可以將客戶關系更改為“多對多訪問”。 這樣您就不會有重復的訪問日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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