2012-03-03 2 views
0

propel ORM과 함께 Symfony 1.4를 사용하는 것이 간단한 작업이라고 생각합니다. 항목의 이름을 검색하여 행의 ID를 반환하는 데 사용하려는 사용자 지정 정적 클래스 설치가 있습니다. 나는 $ 항목 ID, 나는 항목의 이름을 얻을 수를 반환 할 때 지금사용자 정의 propel 쿼리에 액세스하는 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; 
} 

:

여기 내 기능입니다. 그러나 item_id 열을 전혀 가져올 수 없습니다. $ itemID [1] 및 다른 여러 열 인덱스를 반환하려고했지만 그 인덱스는 존재하지 않는다고 말합니다. 만약 내가 print_r ($ itemID), 그 테이블에있는 모든 열의 배열을 참조하십시오, 유일한 값은 item_id 및 item_name 있습니다. 그러나, 나는 그 변수를 반환하거나 접근 할 수있는 방법을 찾을 수 없다.

제안 사항?

답변

1

나는이 오류가 clearSelectColumns의 위치에 있다고 생각하지만, 오해 할 수 있습니다. doSelect 대신 doSelectStmt를 사용하십시오.

$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(); 
관련 문제