开发者

Symfony form with doctrine table other than getTable()->find() is not working

I get a really anoying error when I try to edit an entry from a table, in tutorial they always use getTable()->find(), but I need to verify that the person logged in is the owner of that entry here what I did:

In the action:

  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);
 }

In the model:

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

    return $q->execute();
}

I tried it with and without the ->execute(), did doct开发者_运维技巧rine clean, cleared cache, rebuilded model,

Always get the same error 'The "%s" form only accepts a "%s" object. If I use the Doctrine_Core::getTable('BambinbazarArticles')->find() it work, but of course, i need more than that..

I am becoming crazy over this.


execute() can return multiple rows; effectively you're getting a recordset back, rather than the individual object that your form is expecting. Try fetching a single object, using, e.g.:

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

or

return $q->fetchOne();


Its probably because your query is returning a Doctrine_Collection, not the actual Doctrine_Record youre expecting. Instead of execute use fetchOne.

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

    return $q->fetchOne();
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜