2016-09-28 2 views
0

Ich versuche die unten stehende Eins-zu-Viele Doktrin-Assoziation zu füllen, aber ich stoße auf ein Problem, weil jeder Kunde (Primärschlüssel: id) seine Besuche hat (Primärschlüssel: customer_id & visitday) gefangen in dem Besuch Tisch (ich Ableitung visitday als die Anzahl der Tage seit dem 1. Januar 2000 vor, um die Datenbank persistierende (da Datetime-Objekte können nicht im Primärschlüssel sein)):Doktrin Eins-zu-Viele Assoziation: Probleme mit zusammengesetztem Primärschlüssel

Einheiten

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; 

    /* -- */ 
} 

Mein Problem ist, dass meine Customer Objekte nicht mit den entsprechenden Besuchen des Kunden gefüllt werden. Ich nehme an, dies liegt daran, dass die Doktrin nicht sehen kann, dass sie auch ihre eigene Kunden-ID in die Suche aufnehmen soll. Gibt es eine Möglichkeit, das zu beheben?

Antwort

0

Ich würde Ihnen empfehlen, $ visitday Attribut zu DateTime zu ändern. Es wird der Zeitstempel Ihres Besuchsdatums sein. Dann sollte das Attribut customer in visits mit visits geändert werden.

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

Und als eine Option könnten Sie Relation Customer zu Visits als ManyToMany ändern. Sie haben also keine doppelten Besuchsdaten.

+0

Danke @ Mike-Kor - obwohl '$ visitday' ist eine kategorische Variable für das, was ich brauche. Gibt es eine Möglichkeit, ich kann sie verbinden, so Customer kann Besuche mit einem Array der "$ visitday" Ganzzahlen von nur Besuche dieses Kunden gefüllt haben? – Bendy

+0

@Bendy, tut mir leid für die späte Antwort. Sie haben bereits eine $ visites-Variable in Customer entity, die ein Array von Visit-Entitäten darstellt, über die Sie auf Customer visit days zugreifen können. –

Verwandte Themen