2012-03-03 41 views
0

我正在尝试使用Symfony 1.4与推进ORM进行一些简单的任务。我有一个自定义的静态类设置,我想通过搜索该项目的名称来返回一行的id。Symfony访问自定义推进查询

这里是我的功能:

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

有什么建议吗?

回答

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查询:

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