Zend Framework Relations против выбора таблицы

Привет! Я просто хочу узнать мнение ваших парней об использовании таблиц соединений в рамках zend.

Конечно, вы можете использовать отношения, определяя referenceMap и зависимые таблицы и прочее, или используя

setIntegrityCheck(false)

внутри db select (). Версия setIntegrityCheck мне кажется немного грязной, но другая версия не очень подходит для больших запросов и объединения многих таблиц ...

Я разработчик PHP уже 5 лет, новичок в фреймворке zend и просто хочу получить направление для своего первого проекта.

Спасибо!!!


person rtmilker    schedule 24.04.2010    source источник


Ответы (5)


Я лично использую их повсюду. Обычно я создаю справочную карту, а затем определяю модель с помощью getX (), который вызывает это отношение.

class Model_Content extends Zend_Db_Table_Row_Abstract
{
    public function getComments($showInactive = false)
    {
        $select = $this->_table->select();
        if (!$showInactive) {
            $select->where('comment_active = \'y\'');
        }
        return $this->findDependentRowset('Model_DbTable_Comment', null, $select);
    }
}
person Kevin Schroeder    schedule 24.04.2010

Хороший подход ... Насколько я понимаю, в ZF есть только функция select () для получения одного набора строк, который включает данные из 2 или более таблиц, верно? Например, у меня может быть пользователь, и у этого пользователя есть изображение и учетная запись. Оба находятся в отдельных таблицах.

Когда я использую findDependentRowset, нет возможности получить такой результат, как:

username => tom
imagepath => /images/tom.jpg
accounttype => бесплатно

внутри одного объекта, да? Или я что-то упускаю? Спасибо за вашу помощь!!

person rtmilker    schedule 24.04.2010

Лично я везде использую setIntegrityCheck (false). Да, это немного грязно, но это KISS, и намного проще писать такие сложные запросы на соединение.

person Richard Knop    schedule 24.04.2010

Я также использую setIntegrityCheck (false), потому что, как уже сказал Ричард, это KISS, и это единственный вариант для создания больших запросов. Еще одна приятная вещь при использовании select () - это то, что вы можете повторить это.

Таким образом, вы можете проверить свою работу, что не так уж и просто при использовании referenceMap ...

person tipclapper    schedule 25.04.2010

Все методы findDependentRowset / findParentRow хороши и хороши, если вы не выполняете запросы, извлекающие много данных. Исходя из прошлого опыта, использование этих методов вызывает другой запрос к базе данных, даже если он был выполнен раньше, и я увеличил объем трафика данных между веб-серверами и серверами баз данных. В этом конкретном случае приложение затем необходимо было преобразовать для использования метода соединения.

Однако методы findDependentRowset и findParentRow имеют то преимущество, что они позволяют вам затем вызывать те же методы для нового объекта Zend_Db_Table_Row из вашей объединенной таблицы.

rtmilker: findDependentRowset должен возвращать массив Zend_Db_Table_Rows, поэтому в этом случае:

foreach($myTableAdapter->findDependentRowset('New_Table_Class', 'rule/[null]', $select) as $dependentRowObject){
    Zend_Debug::dump($dependentRowObject->toArray());
}

Очевидно, что для метода findParentRow не потребуется инструкция foreach; То же самое и с методами fetchRow () / fetchAll ().

person lintal    schedule 25.06.2010