我正在尝试将Symfony 1.4与推进的ORM一起做一件微不足道的任务。我有一个自定义的静态类设置,我想通过搜索项目名称来返回行的ID。

这是我的功能:

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。但是,我仍然找不到返回或访问该变量的方法。

有什么建议么?

最佳答案

我认为该错误位于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();

关于php - Symfony访问自定义推进查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9549330/

10-10 12:59