Zend_Db_Select присоединиться к Zend_Db_select

Две модели возвращаются как объекты Zend_Db_Select.

Затем мне нужно присоединиться к ним и одновременно получить данные.

class Model_User extends Abstract_Model { 
    public function sqlUser() { 
    return $this->select(array(
               'user_id', 'user.name', 'user.login', 'address.street', 'city.city_id', 'city.city_name','region.region_id', 'region.region_name'
            )) 
            ->joinUsing('address','address_id','') ->join('city', 'city.city_id = address.city_id', '')
            ->join('region', 'region.region_id = city.region_id', ''); 
    } 
} 

class Model_Technics extends Abstract_Model{ 
    public function sqlList() { 
        return $this->select()
                 // here some more sql
                 ->joinUsing('catalog_model','model_id',''); 
    }
}

Затем мне нужно где-то еще получить sqlList со всей информацией для каждого пользователя. Я не хочу дублировать весь код, я просто хочу присоединиться к sql из пользовательской модели через соединение


person Crusader    schedule 10.08.2012    source источник
comment
было бы намного проще ответить на ваш вопрос, если бы вы предоставили соответствующий фрагмент кода   -  person Don    schedule 10.08.2012
comment
Я собираюсь предложить вам либо реализовать какую-то стратегию отображения, либо просто выбрать 1 таблицу и выполнить запрос, присоединив к ней другие таблицы. То, что у вас есть сейчас, настораживает.   -  person RockyFord    schedule 10.08.2012
comment
Вы можете использовать findDependentRowset для получения вышеуказанных результатов за один выбор, возможно, это поможет вам: framework.zend.com/manual/en/zend.db.table.relationships.html   -  person Rodrigo Ferrari    schedule 16.08.2012


Ответы (1)


Вы можете перебрать «разделы» zend_db_select (столбцы, откуда, соединения, где) и найти способ добавить их к другому запросу, но я бы не стал этого предлагать.

Альтернативой может быть метод «присоединения» к модели, к которой вы присоединяетесь, который возьмет выбранный вами объект и запустит на нем метод(ы) присоединения. Это, конечно, будет зависеть от таблиц, уже доступных в выбранном объекте. Или этот метод может просто вернуть структуру, определяющую, как присоединиться к таблице модели соединения, и ваша основная модель может решить, что с ней делать.

Существует множество решений, но нет действительно простого способа просто соединить два объекта zend_db_select без какой-либо дополнительной логики между ними. Главной недостающей частью будет информация о взаимоотношениях между двумя моделями.

Я знаю, что это не полноценный ответ (поскольку я пока не могу комментировать), но, надеюсь, он укажет вам путь, который кажется пригодным для использования.

person Gordon Forsythe    schedule 05.09.2012