Doctrine一对多关联:复合主键的问题

时间:2016-09-28 09:26:47

标签: mysql doctrine-orm symfony

我正在尝试填充下面的一对多学说关联但是我遇到了问题,因为每个客户(主键:id)都有他们的访问(主键:在访问表中捕获的customer_id& 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。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我建议你将$ visitday属性更改为DateTime。这将是您的访问日期时间戳。然后,客户属性应与访问相反。

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

作为一种选择,您可以将Customer与Visits的关系更改为ManyToMany。所以你不会有重复的访问日期。