2013-02-18 4 views
0

Я построил следующие части моего лиц:Учение - Пустой LeftJoin SQL

/** 
* @var Application_Model_Ticket 
* 
* @OneToMany(targetEntity="Application_Model_Ticket",mappedBy="contacts_id") 
* @JoinColumn(name="id", referencedColumnName="contacts_id") 
*/ 
private $tickets;  
public function getTickets() { 
    return $this->tickets; 
} 


/** 
* @var Application_Model_Contact 
* 
* @ManyToOne(targetEntity="Application_Model_Contact",cascade={"persist"}) 
* @JoinColumn(name="contacts_id", referencedColumnName="id") 
*/ 
private $contact; 
public function getContact() { 
    return $this->contact; 
} 

Когда я теперь попробовать следующее Doctrine Код:

$this->oQueryBuilder->select('contact','ticket') 
        ->from('Application_Model_Contact', 'contact') 
        ->leftJoin('contact.tickets', 'ticket') 
        ->orderBy('contact.id', 'DESC'); 

Я получаю MYSQL-Error. происходит следующее:

FROM contact c0_ LEFT JOIN ORDER BY c0_.id DESC 

Кажется, что доктрина не заполняет в LEFT JOIN правильно. У кого-нибудь есть идея, почему это происходит?

UPDATE:

->leftJoin('contact.tickets', 'ticket', 'WITH','contact.id = ticket.contactsId') 

дает мне

LEFT JOIN AND (c0_.id = t1_.contacts_id) 
+0

Что SQL запросов вы хотите построить с помощью ' doctrine'? –

+0

SELECT fields_of_contact ОТ контакта LEFT JOIN ticket ON ticket.contacts_id = contact.id – abcNocturn

ответ

0

вы пропустите ON в запросе

$this->oQueryBuilder 
    ->select('contact','ticket') 
    ->from('Application_Model_Contact', 'contact') 
    ->leftJoin('contact', 'on contact.ticket=Application_Model_Contact.field') 
    ->orderBy('contact.id', 'DESC'); 

где Application_Model_Contact.field заменить его на поле матч применить JOIN

поэтому ваш запрос должен быть как:

....FROM contact c0_ LEFT JOIN ON table1.field=table2.field ORDER BY c0_.id DESC 

Источник: http://oldforum.symfony-project.org/index.php/m/69061/

Mysql Регистрация: http://dev.mysql.com/doc/refman/5.0/en/join.html

+0

Привет, спасибо за ответ. Пробовал на билет = Application_Model_Contact.id, так как это идентификатор, который соединяется с билетами. Ошибка: Ошибка: Ожидаемый конец строки, полученный 'билет' – abcNocturn

+0

Я редактировал, ваши таблицы являются контактами и application_model_contact? – jcho360

+0

Нет, application_model_contact - сущность, mysqlDB - контакт Без LeftJOIN Я получаю правильный результат Contact-Models – abcNocturn

0

Попробуйте это:

$this->oQueryBuilder->select('contact','ticket') 
        ->from('Application_Model_Contact', 'contact') 
        ->leftJoin('contact.tickets', 'ticket', 'WITH', 'contact.id = ticket.contacts_id') 
        ->orderBy('contact.id', 'DESC'); 
+0

Привет, Я попытался следующие: -> LeftJoin ('contact.tickets', 'билет', 'ON' , 'contact.id = ticket.ticket_id'). Дает мне: Ошибка: Ожидаемый конец строки, получил 'ON' – abcNocturn

+0

@ user1532501 Это также может быть трюком. –

+0

Что значит «by trick»? ' PS: Обновлено мое имя;) – abcNocturn