Идентификаторы таблиц доктрин как идентификаторы массивов - PullRequest
0 голосов
/ 22 февраля 2012

Я нашел очень полезную функцию Doctrine для установки атрибута в таблице для получения идентификаторов базы данных также в качестве ключей в результирующей коллекции Doctrine_Collection. Эта функция описана здесь: http://www.doctrine -project.org / projects / orm / 1.2 / docs / manual / обзор компонентов / 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 до

У кого-нибудь есть идея, как этого добиться для запроса к одной таблице?

Ура, Daniel

1 Ответ

1 голос
/ 22 февраля 2012

Вы ищете ключевое слово INDEXBY .

Ключевое слово INDEXBY предлагает способ сопоставления определенных столбцов как ключей коллекции / массива.По умолчанию Doctrine индексирует несколько элементов в численно индексированные массивы / коллекции.Отображение начинается с нуля.Чтобы переопределить это поведение, вам нужно использовать ключевое слово INDEXBY

...