2011-01-11 8 views
1

私はテーブルからエントリを編集しようとすると本当に面倒なエラーが発生します。チュートリアルでは常にgetTable() - > findモデルでgettable() - > find()以外のdoctrineテーブルを持つsymfonyフォームは動作しません

public function executeEdit(sfWebRequest $request) 
    { 
$id = $request->getParameter('id'); 
$userid = $this->getUser()->getGuardUser()->getId(); 
$ad = Doctrine_Core::getTable('BambinbazarArticles')->getMyAd($id, $userid); 
    $this->forward404Unless($ad, sprintf('Object bambinbazar_articles does not exist (%s).', $request->getParameter('id'))); 
    $this->form = new BambinbazarArticlesForm($ad); 
} 

アクションで:

public function getMyAd($id, $userid) 
{ 
    $q = $this->createQuery('c') 
     ->where('c.id = ? ', $id) 
     ->addWhere('c.userid = ? ', $userid); 

    return $q->execute(); 
} 

I)が、私はログインした人が、私がやったことを、ここでそのエントリの所有者であることを確認する必要があります - > execute()、diをつけて試してみた

常に同じエラーが発生する ''%s 'フォームは「%s」オブジェクトのみを受け入れます。 Doctrine_Core :: getTable( 'BambinbazarArticles') - > find()を使用すると動作しますが、もちろんそれ以上のものが必要です。

私はこれ以上狂っています。

+1

何が起こる - > getFirstとを();'? –

答えて

5

​​は複数の行を返すことができます。効果的にフォームが期待している個々のオブジェクトではなく、レコードセットを取得しています。あなたは `返す$ Q->()を実行しようとした場合例えば、使用して、単一のオブジェクトを取得してみてください。:

return $q->execute()->getFirst(); 

または

return $q->fetchOne(); 
+1

+1私が答えを返す前にコメントしています。私たちはおそらく正しいでしょう:-) – prodigitalson

3

おそらく、あなたのクエリがあなたが期待している実際のDoctrine_Recordではなく、Doctrine_Collectionを返すからです。 executeの代わりにfetchOneを使用してください。

public function getMyAd($id, $userid) 
{ 
    $q = $this->createQuery('c') 
     ->where('c.id = ? ', $id) 
     ->addWhere('c.userid = ? ', $userid) 
     ->limit(1); 

    return $q->fetchOne(); 
} 
+0

そして、私がgetFirst()の代わりに考えていた機能を知るためにドキュメントを読み直す前に、fetchOne()に+1してください:) –

関連する問題