Kdyby/Doctrine – left join na úrovni entit v anotaci
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Dan Hundrt
- Člen | 74
Zdravím,
rád bych se zeptal, zdali je mé uvažování správné. Vždy jsem tabulky propojoval na úrovni sloupec → id tabulky, v SQL něco jako:
SELECT * FROM tabulka1 LEFT JOIN tabulka2 ON tabulka1.sloupec1 = tabulka2.id;
Mám tedy entitu Auto:
class Auto
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @ORM\Column(type="string", length=256)
*/
protected $nazev;
/**
* @ORM\Column(type="integer", nullable=true)
*/
protected $znacka;
Potom entitu Znacka:
class Znacka
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @ORM\Column(type="string", length=256)
*/
protected $nazev;
A teď mám dotaz, jak propojit na úrovni entit sloupec $znacka (z class Auto) a slouepec$id (z class Znacka).
Zkoušel jsem nad $znacka přidat anotaci:
/**
* @ORM\Column(type="integer", nullable=true)
* @OneToOne(targetEntity="Auto")
* @JoinColumn(name="auto_id", referencedColumnName="id")
*/
Doctine však vrátí:
[Semantical Error] The annotation "@OneToOne" in property App\Auto::$znacka was never imported. Did you maybe forget to add a "use" statement for this annotation?
Díky moc
- Dan Hundrt
- Člen | 74
Jsem blb, správně je:
/**
* @ORM\OneToOne(targetEntity="Auto")
* @ORM\JoinColumn(name="auto_id", referencedColumnName="id")
*/
___
Tak možná můžete smazat nebo klidně ponechat pro další :-)
Editoval Dan Hundrt (10. 4. 2017 8:06)
- jiri.pudil
- Nette Blogger | 1032
Ty ale chceš 1:N asociaci, ne? Nebo budeš mít od každé značky jenom jedno auto? :)
class Car
{
/**
* @ORM\ManyToOne(targetEntity="Manufacturer", inversedBy="cars")
*/
protected $manufacturer;
}
class Manufacturer
{
/**
* @ORM\OneToMany(targetEntity="Car", mappedBy="manufacturer")
*/
protected $cars;
}