Doctrine2 çok-bir dernek sorgusu JOIN kullanmak olmaz

0 Cevap php

Ben bir varlık ile bir çok-bir ilişkisi olan bir Car varlık var Owner. Ben bütün arabalar seçerseniz, Doktrin Car masada bir sorgu ve Owner masaya sonradan bir sorgu yapar for each car. Yani N araba getiriliyor N olur yerine 1 sorguları tek bir Car ve Owner tablolar arasında JOIN sorgusu.

Şöyle Benim varlıklardır:

/** @Entity */
class Car {

  /** @Id @Column(type="smallint") */
  private $id;

  /** @ManyToOne(targetEntity="Owner", fetch="EAGER")
      @JoinColumn(name="owner", referencedColumnName="id") */
  private $owner;

  public function getId()    { return $this->id; }
  public function getOwner() { return $this->owner; }
}

/** @Entity */
class Owner {

  /** @Id @Column(type="smallint") */
  private $id;

  /** @Column(type="string") */
  private $name;

  public function getName() { return $this->name; }
}

Ben onların sahipleri ile araba listelemek istiyorsanız, yapın:

$repo = $em->getRepository('Car');
$cars = $repo->findAll();

foreach($cars as $car) 
  echo 'Car no. ' . $car->getId() . 
       ' owned by ' . $car->getOwner()->getName() . '\n';

Şimdi bu tüm ayrı Doktrin her araç için bir sorgu verdiği gerçeğinden, çok iyi çalışıyor.

SELECT * FROM Car;
SELECT * FROM Owner WHERE id = 1;
SELECT * FROM Owner WHERE id = 2;
SELECT * FROM Owner WHERE id = 3;
....

Tabii ki benim sorgu günlük bu gibi bakmak isterdim:

SELECT * FROM Car JOIN Owner ON Car.owner = Owner.id;

I fetch="EAGER" ya da fetch="LAZY" önemli değil, ve ben iki taraf arasında JOIN ile özel bir DQL sorgu yapmak bile, $car->getOwner() hala Doktrin neden olup olmadığını (I $repo->findAll() hepsi neden bu durumda, İSTEKLİ kullandığınız sürece) veritabanını sorgulamak.

Ben burada sadece çok yorgunum ve bu işe gerekiyordu yoludur - ya da bunun yerine JOIN sorgusu yapmak için Doktrini zorlamak için akıllı bir yolu var mı?

0 Cevap