2012-03-03 6 views
0

Propel ORMを使用してSymfony 1.4を使用することは簡単なことでした。アイテムの名前を検索して行のIDを返すカスタム静的クラス設定があります。ここでカスタムプロペルクエリにアクセスするsymfony

は私の機能です:私は$ ITEMIDを返すとき

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)、私はそのテーブル内のすべての列の配列を参照してください、値を持つ唯一の2つは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(); 
関連する問題