+1  A: 
$models = new Models();
$select = $models->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
$select->setIntegrityCheck(false)
       ->join(array("a"=>"manufacturers"), 'models.manufacturer_id = a.id',
         array("man_name"=>"name", "man_description"=>"description"))
       ->where("a.name LIKE 'A%'");
$rowset = $models->fetchAll($select);

Unfortunately the Zend_Db_Table relationships interface doesn't have much intelligence in it related to creating joined queries from its declared reference map. The community-contributed solution for complex queries is the Zend_Db_Table_Select query factory.

Note you have to give column aliases for manufacturer's name and description, or else these columns will suppress the model's name and description in the associative array for the row data. You should name columns distinctly to avoid this.

But in your case, I'd skip the table interface and the select interface, and simply execute an SQL query directly using the Db adapter:

$data = $db->fetchAll("
  SELECT m.*, a.name AS man_name, a.description AS man_description
  FROM Models m JOIN Manufacturers a ON m.manufacturer_id = a.id
  WHERE a.name LIKE 'A%'");

You'll get the data back as a simple array of associative arrays, not as a Zend_Db_Table_Rowset. But since a joined rowset isn't writeable anyway, you haven't sacrificed much.

Bill Karwin
"But since a joined rowset isn't writeable anyway, you haven't sacrificed much." And that's the main point why Zend_Db_Table_Row principle sux in most cases except the most simple.
Tomáš Fejfar
@tomas: The "`+`" operator doesn't do multiplication or division gracefully. Does that mean that "`+`" sux? Or just that it's not the right tool for the job?
Bill Karwin
Why isn't a joined rowset writable? Some databases supports update queries with joins.
troelskn
@troelskn: Zend_Db_Table_Row doesn't track which column originated from which base table.
Bill Karwin