Doctrine orm Doctrine2迭代

Doctrine orm Doctrine2迭代,doctrine-orm,Doctrine Orm,我在表单上有的以下代码 $query = $em->createQuery("SELECT g.name, g.id FROM SSMURBS\Group g ORDER BY g.name ASC");` $groups = $query->iterate();` $groups_option = ""; foreach( $groups as $row ){ $group = $row[0]; $groups_option .= "<option val=\

我在表单上有
的以下代码

$query = $em->createQuery("SELECT g.name, g.id FROM SSMURBS\Group g ORDER BY g.name ASC");`
$groups = $query->iterate();`
$groups_option = "";
foreach( $groups as $row ){
    $group = $row[0];
    $groups_option .= "<option val=\"{$group['id']}\">{$group['name']}</option>\n";
}
$query=$em->createQuery(“从SSMURBS\Group g ORDER BY g.name ASC中选择g.name、g.id”)`
$groups=$query->iterate()`
$groups_option=“”;
foreach($组作为$行){
$group=$row[0];
$groups_option.=“{$group['name']}\n”;
}
但这是一个错误。有效的是

$query = $em->createQuery("SELECT g.name, g.id FROM SSMURBS\Group g ORDER BY g.name ASC");
$groups = $query->iterate();

$groups_option = "";
$i = 0;
foreach( $groups as $row ){
    $group = $row[$i];
    $groups_option .= "<option val=\"{$group['id']}\">{$group['name']}</option>\n";
    $i++;
}
$query=$em->createQuery(“从SSMURBS\Group g ORDER BY g.name ASC中选择g.name、g.id”);
$groups=$query->iterate();
$groups_option=“”;
$i=0;
foreach($组作为$行){
$group=$row[$i];
$groups_option.=“{$group['name']}\n”;
$i++;
}

我做错什么了吗?参考手册将第一个选项引用为正确…

您的变量名称不匹配

删除
$group=$row[0]
并使用
foreach($groups作为$group)

$query=$em->createQuery(“从SSMURBS\Group g ORDER BY g.name ASC中选择g.name、g.id”);
$groups=$query->iterate();
$groups_option=“”;
foreach($组作为$组){
$groups_option.=“{$group['name']}\n”;
}

我找到了自己问题的答案:

虽然DQL允许
选择g.id,g.name
而不抛出错误,但这实际上是SQL,而不是DQL。(感谢《条令参考手册》在这方面如此清晰……)

正确的编码方法是

$query = $em->createQuery("SELECT partial g.{id,name} FROM SSMURBS\Group g ORDER BY g.name ASC");
$groups = $query->iterate();

$groups_option = "";
foreach( $groups as $group ){
$group = $group[0];
$groups_option .= "<option value=\"{$group->id}\">{$group->name}</option>\n";
$query=$em->createQuery(“从SSMURBS\Group g ORDER BY g.name ASC中选择部分g.{id,name}”);
$groups=$query->iterate();
$groups_option=“”;
foreach($组作为$组){
$group=$group[0];
$groups_option.=“{$group->name}\n”;

}

不幸的是,这不起作用:在foreach中使用
->iterate()
时,单个变量(此处
$group
)总是封装在数组中。如果您尝试这样做,它将找不到您的数据。
$query = $em->createQuery("SELECT partial g.{id,name} FROM SSMURBS\Group g ORDER BY g.name ASC");
$groups = $query->iterate();

$groups_option = "";
foreach( $groups as $group ){
$group = $group[0];
$groups_option .= "<option value=\"{$group->id}\">{$group->name}</option>\n";