Я использую php-activerecord в своем проекте Codeigniter, у меня есть 2 таблицы в моей базе данных, таблица вопросов и таблица ответов, связанные в отношении один ко многим, когда я удаляю такой вопрос
$question = Question::find($id);
$question->delete();
Ответы на этот вопрос не удаляются, я должен использовать метод обратного вызова before_destroy во всех моих моделях, чтобы достичь этого, он кажется излишним.
Мой вопрос, возможно ли удалить дочерние объекты, связанные с родителем, когда я удаляю родителя, не используя метод обратного вызова?
Если вы не хотите делать это в базе данных, как предложил @patrick в комментариях, трудно представить способ сделать это, который даст вам больше контроля. Автоматическая вещь (например, добавление ее в функцию удаления) оставит вас такими же ограниченными.
Лучше всего было бы сделать функцию в модели Вопроса. Тот, который удаляет потомков с помощью цикла, тот, который вы бы назвали так:
$q = Question::find($id);
$q->deleteChildern();
$q->delete();
Или функция, которая делает это и удаляет объект, так что вы получите
$q = Question::find($id);
$q->deleteWithChildren();
Сама функция была бы простой вещью вроде
foreach($this->children as $child){
$child->delete();
}
Других решений пока нет …