0°C
завтра: 4°C
Погода в Перми
0°C
ночью2°C
утром3°C
завтра4°C
Подробно
 63,95
−0.0602
Курс USD ЦБ РФна 19 октября
63,9542
−0.0602
 71,13
+0.2276
Курс EUR ЦБ РФна 19 октября
71,1299
+0.2276
  • Сегодня споткнулся о такое явление:

    Имеем 2 класса - наследника от Zend_Db_Table_Abstract, определяющих основную (T1 c FKey) таблицу со связью и родительскую таблицу (T2 на неё ссылается FK). Для поиска родительской записи вызываем T1::$row->findParentRow('ParentClass','Связь'), которая работает нормально, даже в случае когда в T1, FKey =null. Но работает ровно до первого метода T2::$id->update() к данным в родительской таблице. После чего выдается ошибка с номером [HY093] - типа неправильное указание параметров SQL-запроса из функции PDO-select или чего еще...

    Вот куски кода:

    class Tbl1 extends Zend_Db_Table_Abstract
    {
    protected $_name = 'students';
    protected $_primary = 'id';
    protected $_referenceMap = array( // Таблица правил связи.
    'anMaster' => array(
    'columns' => 'master_id',
    'refTableClass' => 'DbMasters',
    'refColumns' => 'id'
    )
    );

    public function getList() {
    $mtbl = new DbMasters; $master = new Zend_Db_Table_Row;
    foreach($this->fetchAll() as $row) {
    if ($row->master_id) { // иначе выдает ошибку SQLSTATE [HY093].
    $master = $row->findParentRow('DbMasters', 'anMaster');
    if (!$master) { throw new Exception('Err! master_id=' . row->master_id . ' not found in the parent table... please check data...'); }
    } else {
    $master->name = '-';
    }

    Как видно из кода - проблему решил просто обрамив вызов метода ->findParentRow(...); условным оператором по проверке значения внешнего ключа.

    Прикол в том, что ошибка не вылезала в течении 2-х дней пока не начал тестить редактирование уже введенных данных в совсем другой модели... может уже всем и известна, а может кому пригодится... я еще только учусь писать на PHP+Mysql+Zend.

    "Только так, только личная инициатива и напряженная работа над собой. Вот я вас хочу именно к этому призвать .. Нужно своей собственной рукой все делать" (с) В.В. Путин :)

  • Простите мою невежественность, а что это за зенд такой, я так понимаю - какой то движок БД. Можно кратко для общего развития его преимущества? А то вдруг что то мне нужное....

  • В ответ на: Простите мою невежественность, а что это за зенд такой, я так понимаю - какой то движок БД. Можно кратко для общего развития его преимущества? А то вдруг что то мне нужное....
    Это мощный PHP фреймворк. Подробную информацию можете получить на http://framework.zend.com/
    Если вы веб-разработчик и ещё не слышали о нем, то сейчас самое время посмотреть в его сторону;)

  • Как пока сам понял, Zend Framework - это огромная библиотека классов на PHP5 для разработки сайтов с использованием ООП и схемы МВК (Модель-Вид-Контроллер). Возможно полезна для сверхбольших проектов. Задачу "ознакомится и разобраться" получил как вариант испытательного срока для вхождения в работу после 15-и летнего перерыва...:улыб:

    Недостатки, замеченные на сегодня (возможно даже пока недостатки):
    1. Чрезмерное употребление техник ООП "где надо и не очень". В частности для фронт-контроллера. Он же создается в единственном экземпляре! Нафига класс, если не темплэйт?

    2. Скудость документации. Практически вся документация построена по принципу "это можно сделать так". Пока еще не нашел нормального и полного описания классов и методов с полным и исчерпывающим описанием параметров. Всё что описано - кусками по разным частям доков. Но это жа замечание отношу и к самому PHP. Синтаксических диаграмм языка - так и не нашел. Т.е. это - не язык программирования. Впрочем и к HTML - частично относится. Похоже что прошедшие 15-лет, программирование и обучение оному сильно изменилось. Крайне распространенным стал "обезъяний" метод обучения "делай так и будет счастье".

    3. Перегруженность возможностями. Многие вещи можно делать 3-6 разными спсобами с использованием разного уровня абстракции.

    4. Модель МВК в реализации Zend - это достаточно сложная структура из каталогов, файлов и именования классов и прочей лабуды... Для реализации сайта, обслуживающего СУБД из 3-х таблиц с суммарно 12-ю полями (в т.ч. и ключи) и 3 страницы доступа - мне потребовалось создать и разложить 15 каталогов и 21 файл. Самое что интересное, полностью отделить элементы модели друг от друга не удается даже в таком простом примере!

    Достоинства: пока вижу только очень грамотный и продуманный подход к реализации. На верхних уровнях доступа (как раз о findParentRow() ) - скорость работы явно оставляет желать лучшего, зато очень хорошо решена проблема абстракции данных. Фактически всю структуру СУБД можно полностью реализовать наследуясь от классов раздела Zend_Db и имея техники PHP-ООП для работы с базой вместо sql-запросов. Практически всю генерацию кода страницы можно провести с помощью Zend_View, Layout и Zend_Form.

    "Только так, только личная инициатива и напряженная работа над собой. Вот я вас хочу именно к этому призвать .. Нужно своей собственной рукой все делать" (с) В.В. Путин :)

Записей на странице:

Перейти в форум

Модератор: