Zend Framework Relations vs. Таблица выбора - PullRequest
1 голос
/ 24 апреля 2010

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

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

setIntegrityCheck(false)

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

Я уже 5 лет являюсь разработчиком PHP и новичком в Zend Framework и просто хочу получить направление для моего первого проекта.

Спасибо !!!

Ответы [ 5 ]

0 голосов
/ 25 июня 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 ().

0 голосов
/ 25 апреля 2010

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

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

0 голосов
/ 24 апреля 2010

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

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

username => tom
imagepath => /images/tom.jpg
accounttype => free

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

0 голосов
/ 24 апреля 2010

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

0 голосов
/ 24 апреля 2010

Я лично использую их повсюду. Обычно я создаю эталонную карту, а затем определяю модель с помощью 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...