Сегодня споткнулся о такое явление:
Имеем 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.
Имеем 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.
"Только так, только личная инициатива и напряженная работа над собой. .. Нужно своей собственной рукой все делать" (с) В.В. Путин(а не на "вертикаль власти" надеяться)