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

Ced*_*gas 1 forms doctrine symfony1

当我尝试从表中编辑一个条目时,我得到了一个非常恼人的错误,在教程中他们总是使用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);
 }
Run Code Online (Sandbox Code Playgroud)

在模型中:

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

    return $q->execute();
}
Run Code Online (Sandbox Code Playgroud)

我试过它有没有 - >执行(),做了教义干净,清除缓存,重建模型,

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

我对此变得疯狂.

Mat*_*son 5

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

return $q->execute()->getFirst();
Run Code Online (Sandbox Code Playgroud)

要么

return $q->fetchOne();
Run Code Online (Sandbox Code Playgroud)