除了getTable() - > find()之外的带有doctrine表的Symfony表单不起作用

时间:2011-01-11 14:11:06

标签: forms symfony1 doctrine

当我尝试从表中编辑条目时,我收到了一个非常恼人的错误,在教程中他们总是使用getTable() - > find(),但是我需要验证登录的人是该用户的所有者在这里我做了什么:

在行动中:

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

我尝试使用和不使用 - > execute(),做了doctrine clean,清除缓存,重建模型,

始终得到相同的错误''%s'表单只接受“%s”对象。 如果我使用Doctrine_Core :: getTable('BambinbazarArticles') - > find()它可以工作,但当然,我还需要更多...

我对此感到疯狂。

2 个答案:

答案 0 :(得分:5)

execute()可以返回多行;实际上,您将获得记录集,而不是表单所期望的单个对象。尝试使用例如:

获取单个对象
return $q->execute()->getFirst();

return $q->fetchOne();

答案 1 :(得分:3)

可能是因为您的查询返回了Doctrine_Collection,而不是您期望的实际Doctrine_Record。而不是execute使用fetchOne

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

    return $q->fetchOne();
}