2016-10-12 2 views
0

ich kann keine echte Abfrage aus 2 Tabellen tun.queryBuilder create sql mit innerJoin

/** 
* Order 
* 
* @ORM\Table(name="order_work") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\OrderWorkRepository") 
*/ 
class OrderWork 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Client", cascade={"persist"}) 
    * @ORM\JoinColumn(name="client_id", referencedColumnName="id") 
    */ 
    private $client; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="orderNumber", type="string", length=255) 
    */ 
    private $orderNumber; 

und Client-Einheit haben id, Name, Vorname Parameter:

I Suche nach Aufträgen Spalte tun wollen, und von Client-Parameter, wie ich die Abfrage kann)

nur für Aufträge arbeiten? dies:

$queryBuilder = $this->createQueryBuilder('c') 
     ->orWhere('c.orderNumber LIKE :term') 
     ->orWhere('c.device LIKE :term') 
     ->setParameter('term', '%'.$term.'%'); 
+0

Ich habe schon ein paar Minuten über Ihre Frage gehen und es ist nicht sehr klar. Können Sie Ihre Frage bitte bearbeiten und weitere Details hinzufügen? Sehen Sie [wie Sie eine Frage stellen, um weitere Details zu erhalten] (http://stackoverflow.com/help/how-to-ask). Ich gebe Ihnen -1, bis Sie aktualisieren. Auch in Ihrem createQueryBuilder geben Sie einen Alias ​​von 'c' - why an. Ist das "OrderWork"? Aber für 'OrderWork' gibt es keine Spalte von' device'! Also, was willst du wirklich fragen? –

Antwort

2

Sie müssen eine Abfrage mit einem Join machen, die mit dem Querybuilder möglich ist, aber Ich mag DQL verwenden.

public function findOrdersOnClientName($searchTerm) 
{ 
    return $this->getEntityManager()->createQuery(
     'SELECT o, c FROM AppBundle:OrderWork o 
     JOIN o.client c 
     WHERE c.name LIKE :term' 
    )->setParameter('term, '%'. $searchTerm . '%')->getResult(); 
}