Symfony получает доступ к пользовательскому запросу Propel - PullRequest
0 голосов
/ 03 марта 2012

Я пытаюсь сделать то, что я считаю тривиальной задачей, используя 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] и несколько других индексов столбцов, но он говорит, что они не существуют. Если я печатаю_r ($ itemID), я вижу массив каждого столбца в этой таблице, единственными двумя со значениями являются item_id и item_name. Тем не менее, я до сих пор не могу найти способ вернуть или получить доступ к этой переменной.

Есть предложения?

1 Ответ

1 голос
/ 04 марта 2012

Я думаю, что ошибка в положении 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();
...