Symfony и DQL синтаксис - PullRequest
       27

Symfony и DQL синтаксис

0 голосов
/ 27 августа 2011

Я прошу прощения за вопрос новичка, но я борюсь с тем, что кажется простым запросом.Я могу заставить его работать отлично в MySQL, но не могу заставить его работать в моем приложении Symfony.По сути, это все, что я пытаюсь сделать:

SELECT * 
FROM benefits b
WHERE b.company_id = X

X = 
SELECT id
FROM company c
WHERE c.user_id = ($this->getUser()->getGuardUser()->getId())

Я перепробовал много операторов объединения, но все еще не могу заставить его работать с желаемым результатом, таким как:

public function executeIndex(sfWebRequest $request)
{
$this->benefitss = Doctrine_Core::getTable('benefits')
->createQuery('b')
->where('user_id = ?', '$this->getUser()->getGuardUser()->getId()')
->leftJoin('b.Company c')
->andWhere('c.user_id = ?', '$this->getUser()->getGuardUser()->getId()')
->execute();      
}

Вот моя сокращенная схема:

Benefits
 columns
  id
  user_id
  company_id
  name
 relations
  User {class: sfGuardUser}
  Company 

Company
 columns
  id
  user_id
  name
 relations
  User {class: sfGuardUser}

sfGuardUser
 columns
  id

также примечание: пользователю не назначен company_id, потому что не все пользователи будут иметь компании в соответствии с моими определениями пользователей.

Любая помощь для этого убогого новичка будет высоко ценится.:)

Обновление от 27.08.11:

Получает желаемые результаты:

$this->benefitss = Doctrine_Core::getTable('benefits')
->createQuery('b')
->leftJoin('b.Company c')
->Where('c.user_id = ?', '1')
->execute();      

Где «1» должно быть идентификатором текущего пользователя.Но когда я изменяю предложение where на:

->Where('c.user_id = ?', '$this->getUser()->getGuardUser()->getId()')

, я не получаю результатов.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 27 августа 2011

Не помещайте $this->getUser()->getGuardUser()->getId() в ''.

0 голосов
/ 27 августа 2011

Я понял это. Вот как (я, очевидно, начинающий):

    $this->benefitss = Doctrine_Core::getTable('benefits')
    ->createQuery('b')
    ->leftJoin('b.Company c')
    ->Where('c.user_id = ?', $this->getUser()->getGuardUser()->getId())
    ->execute();      
...