我发现了一个非常有用的Doctrine函数,用于在表上设置一个属性,以便将数据库ID也作为生成的Doctrine_Collection中的键。此功能记录在此处:http://www.doctrine-project.org/projects/orm/1.2/docs/manual/component-overview/en#collection:key-mapping
现在的问题。我无法使用表对象本身,因为我需要在表上创建动态查询(而不是示例中的魔术查找器)。
我试过这段代码:
$doctrineTable = Doctrine_Core::getTable($table);
$doctrineTable->setAttribute(Doctrine_Core::ATTR_COLL_KEY, "id");
$q = $doctrineTable->createQuery("t");
foreach ($filter as $c => $v) // lopp thru coumns
if (is_array($v)) // use whereIn if value is an array
$q->andWhereIn("t." . $c, $v);
elseif (is_null($v)) // use is null for null values
$q->andWhere("t." . $c . " IS NULL");
else // use where in other cases
$q->andWhere("t." . $c . "=?", $v);
return $q->fetchAll();
不幸的是,结果集合仍然没有使用关联数组,而是使用0以上的正常数据。
任何人都知道如何在单个表上实现查询?
干杯, 丹尼尔
答案 0 :(得分:1)
您正在寻找the INDEXBY keyword。
INDEXBY关键字提供了将某些列映射为集合/数组键的方法。默认情况下,Doctrine将多个元素索引到数字索引的数组/集合。映射从零开始。要覆盖此行为,您需要使用INDEXBY关键字