Прошу прощения за вопрос новичка, но я борюсь с тем, что кажется простым запросом. Я могу заставить его работать идеально в 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 b / c, не у всех пользователей будут компании в соответствии с моими определениями пользователей.

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

Обновление 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()')

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

Любые идеи?

0
Patrick 27 Авг 2011 в 00:30

2 ответа

Лучший ответ

Я понял. Вот как (я явно новичок):

    $this->benefitss = Doctrine_Core::getTable('benefits')
    ->createQuery('b')
    ->leftJoin('b.Company c')
    ->Where('c.user_id = ?', $this->getUser()->getGuardUser()->getId())
    ->execute();      
0
Patrick 27 Авг 2011 в 19:13

Не вставляйте $this->getUser()->getGuardUser()->getId() в ''.

2
scube 26 Авг 2011 в 20:53