当我尝试从表中编辑条目时,我收到了一个非常恼人的错误,在教程中他们总是使用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()它可以工作,但当然,我还需要更多...
我对此感到疯狂。
答案 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();
}