Wpis z mikrobloga

#symfony #symfony2 #php
taka sprawa, powiedzmy że mam dwie encje:
Przystanek oraz Linia (autobusowa/tramwajowa, etc..)

Jaka relacja powinna być pomiędzy Przystanek a Linia oraz Linia a Przystanek?

Mam taką relację, ale obawiam się że to nie jest dobre podejście.. Ktoś coś?

class Line
{
/**
* @ORM\OneToMany(targetEntity="BusStop", mappedBy="line")
* */
private $busstop;
}

class BusStop
{
/**
*
* @ORM\ManyToOne(targetEntity="Line", inversedBy="busstop")
* @ORM\JoinColumn(name="line", referencedColumnName="id")
* @var line
*/
private $line;
}
  • 10
@qwelukasz: Raczej musisz mieć jeszcze pośrednie entity, które pozwoli Ci na definiowanie choćby kolejności przystanku w linii. Nie mówiąc o innych pierdołach, np. czy przystanek występuje w jedną stronę, czy w dwie. Może też tak być, iż powrót będzie realizowany trochę inną drogą, a obecna relacja nie pozwoli Ci na duplikaty.
@Kofels: encja BusStop wygląda jak poniżej także kwestie takie jak kierunek czy nr przystanku mam.
Nie wiem tylko czy relacja między linią a przystankiem jest prawidłowa.
Wiele linii może mieć jeden przystanek, jeden przystanek może mieć wiele linii.
Czy w przypadku BusStop`line nie powinna być relacja OneToMany?

```class BusStop```
{
``` /**```
* @ORM\Id
* @ORM\Column(name="id", type="integer", nullable=false, options={"unsigned"=true})
* @ORM\GeneratedValue(strategy="AUTO")
*/
``` private $id;```

```
to ManyToMany ;), ale wtedy weź pod uwagę, że informacje zapisane w BusStop, takie jak: direction czy też number będą współdzielone dla wszystkich linii. Dlatego proponowałem Ci encję, która będzie pośredniczyła pomiędzy linią a przystankiem.
@qwelukasz: Może wyjaśnię to, co @Kofels ci proponował. Przystanek jako miejsce powinien być jeden (potrzebujesz tego do wyszukiwania sposobu dojazdu), a dopiero przystanków konkretnej linii (np. PrzystanekLinii) jako rozkładów i kolejności będzie więcej. Nie będziesz miał bezpośredniej relacji ManyToMany. Za pomocą tabeli pośredniczącej (PrzystanekLinii) mającej odniesienia do Linii i miejsca będziesz pytał tylko o jedną lub drugą relacje - jakie linie jadą w dane miejsce, lub w jakie miejsca jedzie dana
@MQs: mhmm chyba już to rozkminiłem..

/**
*
* @ORM\ManyToMany(targetEntity="Line", inversedBy="busstop")
* @ORM\JoinTable(name="bus_line",
* joinColumns={@ORM\JoinColumn(name="busstop", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="line", referencedColumnName="id")}
* )
* @var line
*/
private $line;