Symfony получает доступ к пользовательскому запросу propel

Я пытаюсь делать то, что, как мне казалось, было бы тривиальной задачей, используя Symfony 1.4 с propel ORM. У меня есть настраиваемая настройка статического класса, которую я хотел бы использовать для возврата идентификатора строки путем поиска имени элемента.

Вот моя функция:

static public function getItemIdByName ( $name )
{
    $criteria = new Criteria();
    $criteria-> clearSelectColumns();
    $criteria -> add (ItemsPeer::ITEM_NAME, $name, Criteria::LIKE );
    $criteria -> addSelectColumn(ItemsPeer::ITEM_ID);
    $criteria -> setLimit (1);

    $itemID = ItemsPeer::doSelect( $criteria );

    return $itemID;
}

Теперь, когда я возвращаю $ itemID, я получаю имя элемента. Однако я вообще не могу получить столбец item_id. Я пробовал вернуть $ itemID [1] и несколько других индексов столбцов, но он говорит, что их не существует. Если я print_r ($ itemID), я вижу массив каждого столбца в этой таблице, только два со значениями - это item_id и item_name. Однако я все еще не могу найти способ вернуть или получить доступ к этой переменной.

Какие-либо предложения?


person Eric    schedule 03.03.2012    source источник


Ответы (1)


Думаю, что ошибка в позиции clearSelectColumns, но могу ошибаться. Попробуйте использовать doSelectStmt вместо doSelect:

$c = new Criteria();
$c->add(ItemsPeer::ITEM_NAME, $name, Criteria::LIKE);
$c->clearSelectColumns();
$c->addSelectColumn(ItemsPeer::ITEM_ID);
$c->setLimit(1);

$stmt = ItemsPeer::doSelectStmt($c);
return $stmt->fetch(PDO::FETCH_COLUMN); // $itemID

Это должно решить ваши проблемы. Однако, если вы используете sf 1.4 и Propel> = 1.5, я бы посоветовал вам использовать Propel Query:

return ItemsQuery::create()
  ->filterByItemName($name . '%')
  ->select('ItemId')
  ->findOne();
person melekes    schedule 04.03.2012