В моем ModelsTable
у меня есть два виртуальных поля для самостоятельной ссылки на принадлежность toTany между моделью и другой (дочерний является родителем и может иметь несколько дочерних элементов) с использованием AccessoriesTable
(с model_id
и accessory_id
столбцы) для создания ссылки.
$this->belongsToMany('AccessoryModels', [
'className' => 'Models',
'through' => 'Accessories',
'foreignKey' => 'model_id',
'targetForeignKey' => 'accessory_id'
]);
$this->belongsToMany('ParentAccessoryModels', [
'className' => 'Models',
'through' => 'Accessories',
'foreignKey' => 'accessory_id',
'targetForeignKey' => 'model_id'
]);
При удалении модели я хочу быть уверенным, что она не используется в качестве аксессуара (дочернего элемента) другой модели. Поэтому я попытался создать пользовательское правило в ModelsTable
, но это не сработает (не удалит ни одну модель, даже если она не является аксессуаром другой модели).
$rules->addDelete(function ($entity, $options) use($rules) {
$rule = $rules->existsIn(['accessory_id'], 'ParentAccessoryModels');
return !$rule($entity, $options);
}, 'isNotAnAccessory');
Есть идеи?