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
+
0
-

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
+
+1
-

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 | 1028
+
0
-

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;
}