可能与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();
显然,它不起作用。我正在寻找解决方案很长一段时间,但可能我使用了错误的词,因为我找不到任何有用的信息。我会非常感谢任何帮助。
答案 0 :(得分:1)
您可以将任务的默认顺序定义为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 }
这样,当您通过Project时,您的任务会按名称自动排序。
答案 1 :(得分:1)
如果要在查询中使用选择器“t”,则应将其定义为select方法:
$projectWithTasks = Doctrine_Query::create()
->select('p.*, t.*')
->from('Project p')
->leftJoin('p.Tasks t')
->where('p.id = ?', $projectId)
->orderBy('t.name ASC')
->fetchOne();
或者你可以使用你的语法,只需用“p.Tasks”替换顺序中的“t”:
$projectWithTasks = Doctrine_Core::getTable("Project")->createQuery("p")
->leftJoin("p.Tasks t")
->where("p.id = ?", $projectId)
->orderBy("p.Tasks.name ASC")
->fetchOne();