Получить доктринальные отношения в DQL - PullRequest
0 голосов
/ 26 июня 2010

У меня есть три таблицы:

Project:
  ...
  relations:
    User:
      local: authorId
      foreign: id
    Users:
      class: User
      local: projectId
      foreign: userId
      refClass: UserProjects

User:
  ...
  relations:
    Projects:
      class: Project
      local: userId
      foreign: projectId
      refClass: UserProjects

UserProjects:
  columns:
      id:
        type: integer
        primary: true
        autoincrement: true
      userId: integer
      projectId: integer

Что я хотел бы сделать, это написать оператор DQL для возврата проектов, с которыми связан пользователь.Я пытаюсь эмулировать следующее:

SELECT p.* 
FROM user_projects AS up
LEFT JOIN project AS p ON up.projectid = p.id
LEFT JOIN user AS u ON up.userid = u.id
WHERE u.id = 1

Читая инструкции Doctrine, я пришел к следующему (там есть u. *, Поскольку он жаловался на то, что вы не используются в операторе select):

$q = Doctrine_Query::create()
  ->from('Model_User u')
  ->select('u.*, p.*')
  ->leftJoin('u.Projects p');
$result = $q->execute();

Однако он возвращает набор данных, содержащий один объект Model_User со свойством «Projects», заполненным соответствующими проектами.Я хотел бы просто вернуть проекты, если это возможно, но я не могу понять это.Возможно ли это?

1 Ответ

0 голосов
/ 02 июля 2010

У меня были неправильные отношения. Мне пришлось сделать следующее, и я смог заставить Doctrine автоматически строить правильные отношения без необходимости использовать DQL (поэтому я мог перейти в $ user-> UserProjects или $ project-> UserProjects)

Project:
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    ...
    authorId: integer
    ...
  relations:
    User:
      local: authorId
      foreign: id
    Users:
      foreignAlias: Projects
      class: User
      refClass: UserProjects

User:
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    ...

UserProjects:
  columns:
      id:
        type: integer
        primary: true
        autoincrement: true
      user_id: integer
      project_id: integer
  relations:
    Project:
      foreignAlias: UserProjects
    User:
      foreignAlias: UserProjects
...