пятница, 3 августа 2007 г.

Zend Framework 1.0 и Oracle.

На работе надо было связаться с оракловым сервером. Так как я решил поплотнее пообщаться с Zend Framework, было решено соединяться им. К тому же он предоставляет достаточно хороший каркас для создания приложений. И со временем, я думаю, я буду использовать его всё больше.

Ну так вот. Соединился я с базой. И всё, вроде, нормально, если писать запросы руками. Т.е. "SELECT * FROM USER". Но это не очень интересно. Так как ZF предоставляет достаточно классов для работы с базой в более прозрачном режиме. НО! При попытке создать запрос его средствами, я получал ошибку. 942 ORA-00942: table or view does not exist. И дальше шёл странный такой SQL-запрос. Слабо похожий на то, что любит Oracle.

Мне сразу не очень понравились все эти кавычки вокруг имени таблицы и полей. И Ораклу они тоже не нравятся.

В документации я решения проблемы не нашёл. Долго бродил по исходному коду. Безысходно. Спросил у умных. Те объяснили мне, что эти кавычки появляются автоматически и отвечает за это переменная $_autoQuoteIdentifiers в классе Zend_Db_Adapter_Abstract.

Поначалу я на радостях просто выставил ей false, но потом понял, что модификация фреймворка не есть гуд. Потому что проблемы с обновлениями не заставят себя ждать. И тогда мне очередные умные люди объяснили, что надо просто при инициализации подключения надо указать в параметрах опцию 'options' => array(Zend_Db::AUTO_QUOTE_IDENTIFIERS => false). И всё будет ок.

2 комментария:

Unknown комментирует...

а еще у ZF есть довольно неприятный момент при использовании PostgreSQL:

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

{{'val1 foo','val2 foo'},{val3,'val4 foo'}}

что неприятно - распарсить эту строку не так просто (если в значении элемента массива нет пробелов, то отсутствуют кавычки).

пришлось писать шаманскую рекурсивную приблуду, которая делала преобразование уже после работы ZF, что не есть гут =/
а если быть точнее, то была еще приблуда, которая делала то же самое наоборот )

Анонимный комментирует...

Zend Framework 1.6 - только начал его изучать.
Вот соединился с ораклом, все нормально, но почему то не хочет работать с представлениями, то есть с таблицами все ок, а при обращение к представления пишет что там про ключи.