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