添加其他数据以选择查询结果

时间:2012-06-23 08:33:00

标签: php zend-framework zend-db-table

我从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.
}

我希望你能理解我在寻找什么。 或者,最好是编写单个查询(使用连接,不知道如何)并在不调用其他模型的方法的情况下获取一次所需的所有数据?

2 个答案:

答案 0 :(得分: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';
}

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

答案 1 :(得分: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