我正在尝试将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/