为什么没有模型事件处理程序被调用它被删除?

时间:2016-04-15 19:21:20

标签: laravel laravel-5 eloquent laravel-5.2

根据Using Model Events Listener in Laravel 5中接受的答案,以下代码应该正常工作:

class Question extends Model
{
    public function answers()
    {
        return $this->hasMany(Answer::class);
    }

    // this is a recommended way to declare event handlers
    protected static function boot() {
        parent::boot();

        // before delete() method call this
        static::deleting(function($question) {
            $question->answers()->delete();
        });
    }
}

但是,在php artisan tinker执行以下操作后:

$q = App\Question::create()
$q->answers()->create()
$q->delete()

答案仍然存在于数据库中。似乎问题模型上的事件处理程序没有被触发。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

首先,如果可以,我会回答评论。

嗨,据我所知,只有在明确删除每个模型时才会触发删除事件。

来自Soft Delete Cascading with Laravel 5.2

的回答

答案 1 :(得分:1)

您应该在编码的引导操作中添加到AppServiceProvider,如此

\App\Questions::deleting(function($answers) {
           $answers = Answers::where('question_id', '=', $answer->id)
                   ->get();
           foreach ($answers as $answer) {
               // and here delete questions
           }

       });