Как отсортировать поля связанной (объединенной) таблицы в результатах запроса? - PullRequest
2 голосов
/ 16 января 2012

Вероятно, больше относится к SQL, чем к самому Dotrine.

У меня есть две таблицы, указанные в файле схемы примерно так:

Project:
  columns:
    name: { type: string(255), notnull: true }

Task:
  columns:
    project_id: { type: integer, notnull: true }
    name: { type: string(255), notnull: true }
  relations:
    Project: { onDelete: CASCADE, local: project_id, foreign: id, foreignAlias: Tasks }

Я бы хотел получить проект со списком его задач, отсортированным по названию.

$projectWithTasks = Doctrine_Core::getTable("Project")->createQuery("p")
    ->leftJoin("p.Tasks t")
    ->where("p.id = ?", $projectId)
    ->orderBy("t.name ASC")
    ->fetchOne();

Очевидно, это не сработает. Я долго искал решение, но, возможно, я использую неправильные слова, потому что не смог найти никакой полезной информации. Буду очень признателен за любую помощь.

Ответы [ 2 ]

1 голос
/ 30 апреля 2012

Если вы хотите использовать селектор "t" в своем запросе, вы должны определить его для метода выбора:

$projectWithTasks = Doctrine_Query::create()
     ->select('p.*, t.*')
     ->from('Project p')
     ->leftJoin('p.Tasks t')
     ->where('p.id = ?', $projectId)
     ->orderBy('t.name ASC')
     ->fetchOne();

В качестве альтернативы вы можете использовать свой синтаксис, просто замените "t" в orderBy на "p.Tasks":

$projectWithTasks = Doctrine_Core::getTable("Project")->createQuery("p")
    ->leftJoin("p.Tasks t")
    ->where("p.id = ?", $projectId)
    ->orderBy("p.Tasks.name ASC")
    ->fetchOne();
1 голос
/ 17 января 2012

Вы можете определить порядок по умолчанию для Задач как отношение Проектов в вашем YML-файле, например:

Project:
  columns:
    name: { type: string(255), notnull: true }
  relations:
    Task:
      local: id
      foreign: project_id
      orderBy: name

Task:
  columns:
    project_id: { type: integer, notnull: true }
    name: { type: string(255), notnull: true }

Таким образом, ваши задачи автоматически сортируются по имени при получении через Проект.

...