Я разрабатываю приложение в Zend Framework для обработки арендной платы коммерческой компании по аренде недвижимости. Компания имеет несколько зданий, каждое из которых имеет несколько этажей, каждое из которых имеет несколько единиц.
Модели, которые я установил, просто расширяют Zend_Db_Table_Abstract
, и я установил их с $_dependentTables
и $_referenceMap
s с каскадным удалением, так что при удалении пола все единицы в нем удаляются тоже, и когда я удаляю здание, все этажи в нем удаляются. Однако, когда я удаляю здание и этажи удаляются, удаление не распространяется каскадно на единицы каждого этажа. (редактировать: я использую MySQL, поэтому я не могу использовать ссылочную целостность на уровне БД.)
Я посмотрел, как удаляются каскадно, и кажется, что они не каскадные, потому что каскадные удаления выполняются с использованием объекта Zend_Db_Table
, а не объекта Zend_Db_Table_Row
(который вы должны использовать для достижения каскадирования ).
Можно ли каким-либо образом обновить систему, чтобы удаление каскадов происходило полностью? Есть ли способ, которым я могу изменить отношения своих классов, или мне нужно использовать что-то вроде Doctrine?
(Полагаю, я мог бы переопределить метод delete()
для строки каждой таблицы или чего-то в этом роде, но я просто подумал, возможно ли это, используя функциональность отношений ZF?)
Если это поможет, вот соответствующие части определений классов:
class Buildings extends Zend_Db_Table
{
protected $_dependentTables = array('Floors');
}
class Floors extends Zend_Db_Table
{
protected $_dependentTables = array('Units');
protected $_referenceMap = array(
'Building' => array(
'columns' => 'building_id',
'refTableClass' => 'Buildings',
'refColumns' => 'id',
'onDelete' => self::CASCADE,
));
}
class Units extends Zend_Db_Table
{
protected $_referenceMap = array(
'Floor' => array(
'columns' => 'floor_id',
'refTableClass' => 'Floors',
'refColumns' => 'id',
'onDelete' => self::CASCADE,
));
}