Ice*_*ube 1 php zend-framework zend-db-table zend-db
我是 Zend 框架的新手,在这个简单的函数中,我想获得一个“帖子”,然后我想在相关表中找到所有评论
public function getPost($idPost)
{
$db= Zend_Registry::get('db');
$select=$db->select()
->from($this->_name, '*')
->where("idPost= ".$db->quote($idPost, 'INTEGER'));
$stmt=$select->query();
$rowset=$stmt->fetchAll();
$post=$rowset->current();
//ora devo aggiungerci i commenti che questo post ha ricevuto
$comm=$post->findDependentRowset('commenti');
$ris=array($post, $comm);
return $ris;
}
Run Code Online (Sandbox Code Playgroud)
在我的索引控制器中,我只是简单地调用了这个函数,但是我得到了这个错误:
Call to a member function current() on a non-object in C:\xampp\htdocs\...
Run Code Online (Sandbox Code Playgroud)
错在哪里?
我认为您对如何使用 Zend_Db 有一些误解。
这意味着,您的查询不会返回 Zend 行集和行,因此您不能使用可以在这些行上使用的方法。
Zend_Db_Statement fetchAll() 方法的默认获取模式是数组,如果你想让它返回一个对象(stdClass),在获取数据之前改变获取模式:
$stmt->setFetchMode(Zend_Db::FETCH_OBJ);
Run Code Online (Sandbox Code Playgroud)
如果你只想要一行,那么不要取整张表!使用 Zend_Db_Statement,例如使用:
$row = $stmt->fetch();
Run Code Online (Sandbox Code Playgroud)
或者
$rowObj = $stmt->fetchObject();
Run Code Online (Sandbox Code Playgroud)
...再说一次,这不是一个 zend 行对象,只是一个 stdClass 实例,但你可以这样做:
$rowObj->some_field;
Run Code Online (Sandbox Code Playgroud)
在上面。
另一方面,如果这是 Post 模型中的一个方法,它应该类似于:
public function getPost($idPost)
{
return $this->getRow($idPost);
}
Run Code Online (Sandbox Code Playgroud)
这将返回帖子,然后,如果您正确设置了表关系,您还可以查询相关数据或单独获取具有该 ID 的所有评论。