1

我正在从 Articles 表中获取数据,但我想用另一个表中的一些数据扩展返回的结果。例如:

public function getArticlesByCategoryId($category_id = 0) { 
    $select = $this->_db->select()
            ->from($this->_name)
            ->limit(5)
            ->order("pubDate DESC");

    $result = $this->_db->fetchAll($select);

    $mCategories = new Model_Categories();

    foreach($result as $row) { // as &$row doesn't work
        $category_name = $mCategories->getNameById($row["category_id"]);
        $row["category_name"] = $category_name; // this to add to $result but dunno how 
        // blah blah...
    } 

    return $result; // the new one with ...->category_name in it.
}

我希望你能明白我在找什么。或者最好编写一个查询(使用连接,不知道如何)并一次获取所有需要的数据而不调用另一个模型的方法?

4

2 回答 2

1

这确实看起来你应该使用join. 这绝对是解决您的问题的最简单方法。以下查询可以解决问题:

$select = $this->_db->select()
        ->from($this->_name)
        ->join('category_table', 'category_table.id = ' . $this->_name . '.category_id', array('category_name'))
        ->limit(5)
        ->order("pubDate DESC");

这会将类别名称添加到行中。


如果您不想使用联接,您可以使用自定义行类将自定义字段添加到您的行。然而,这需要更多的工作。创建类如下:

class MyApp_Model_Row_MyRow extends Zend_Db_Table_Row_Abstract 
{
     public $categoryName;
}

然后你应该在你的 DbTable 类中指出你想使用这个新的行类:

class MyApp_Model_DbTable_Articles extends Zend_Db_Table_Abstract
{
    ...
    protected $_rowClass = 'MyApp_Model_Row_MyRow';
}

然后,您可以在获取的行中设置类别名称。

于 2012-06-23T10:15:45.547 回答
0

要从您的类别表中获取所有包含数据的文章,您的查询可能如下所示:

    $select = $this->_db->select()
            ->from($this->_name)
            ->joinLeftUsing('category','category_id', array('category_name'))
            ->order("pubDate DESC");

另见: http: //framework.zend.com/manual/en/zend.db.select.html

于 2012-06-23T10:17:06.810 回答