2012-03-03 37 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();