Zend框架当前获取单行的方法

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)

错在哪里?

mar*_*kus 5

我认为您对如何使用 Zend_Db 有一些误解。

1. 你没有使用 ORM,只是使用 PDO 包装器

这意味着,您的查询不会返回 Zend 行集和行,因此您不能使用可以在这些行上使用的方法。

2.默认获取方式

Zend_Db_Statement fetchAll() 方法的默认获取模式是数组,如果你想让它返回一个对象(stdClass),在获取数据之前改变获取模式:

$stmt->setFetchMode(Zend_Db::FETCH_OBJ);
Run Code Online (Sandbox Code Playgroud)

3. 当你真正想要一行时使用 fetchAll()

如果你只想要一行,那么不要取整张表!使用 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 的所有评论。