/** * Procura todos os objetos por um determinado campo, realizando a juncao das chaves estrangeira * configuradas no mapa * * @param string $field * @param mixed $value * @param int $order * @param int $start * @param int $limit * @return Ibe_Map */ public function findAllByWithJoin($fields, $values, $order = array(), $start = 0, $limit = 10000) { //Ibe_Debug::show($this,__FILE__,true); $select = Ibe_Database_Query::newSelect($this->table_name)->addWhere($this->getWhere($fields, $values)); foreach ($this->columns as $col) { $select->addField($this->getTableName() . '.' . $col); } if (isset($this->foreign_key)) { foreach ($this->foreign_key as $key => $tbl) { $table = Ibe_Map::getTable($tbl); $as = str_replace('.', "_", $table->getTableName()); foreach ($table->getColumns() as $col) { $select->addField($table->getTableName() . '.' . $col . ' AS ' . $as . '_' . $col); } $on = $key; $field_on = $table->getTableName() . '.' . $table->getPrimaryKey(); $field_on_right = $this->getTableName() . '.' . $on; $select->addJoin(Ibe_Database_Query::newJoin($table->getTableName(), $this->getTableName())->addWhere(Ibe_Database_Query::newWhere()->andWhere($field_on, $field_on_right, '=', 'column'))); } } /*else { throw new Ibe_Exception(Ibe_Exception::MAPA_SEM_FK, array($this->table_name)); }*/ return $this->mountObjectsToFinds($select, true); }