Laravel 为什么';调用t模型事件处理程序';s删除?
根据中接受的答案,以下代码应正常工作:Laravel 为什么';调用t模型事件处理程序';s删除?,laravel,laravel-5,eloquent,laravel-5.2,Laravel,Laravel 5,Eloquent,Laravel 5.2,根据中接受的答案,以下代码应正常工作: 类问题扩展模型 { 公共职能部门答覆() { 返回$this->hasMany(答案::class); } //这是声明事件处理程序的推荐方法 受保护的静态函数启动(){ 父::boot(); //在delete()方法调用之前 静态::删除(函数($question){ $question->answers()->delete(); }); } } 但是,在php artisan tinker中执行以下操作后: $q=App\Question::cre
类问题扩展模型
{
公共职能部门答覆()
{
返回$this->hasMany(答案::class);
}
//这是声明事件处理程序的推荐方法
受保护的静态函数启动(){
父::boot();
//在delete()方法调用之前
静态::删除(函数($question){
$question->answers()->delete();
});
}
}
但是,在php artisan tinker中执行以下操作后:
$q=App\Question::create()
$q->answers()->create()
$q->删除()
答案仍然存在于数据库中。似乎问题模型上的事件处理程序没有被触发。如何解决这个问题?首先,如果可以的话,我会给出一个评论 嗨,据我所知,只有在明确删除每个模型时才会触发删除事件
从中的回答中,首先,如果可以的话,我会用评论来回答 嗨,据我所知,只有在明确删除每个模型时才会触发删除事件
在中的回答中,您应该在启动操作中向AppServiceProvider添加代码,如下所示
\App\Questions::deleting(function($answers) {
$answers = Answers::where('question_id', '=', $answer->id)
->get();
foreach ($answers as $answer) {
// and here delete questions
}
});
您应该在代码中的引导操作中添加到AppServiceProvider,如下所示
\App\Questions::deleting(function($answers) {
$answers = Answers::where('question_id', '=', $answer->id)
->get();
foreach ($answers as $answer) {
// and here delete questions
}
});
尝试在
static::deleted
instead@HugoS.Mendes谢谢你的回复。在static::deleted
instead@HugoS.Mendes谢谢你的回复。我试过了,但没有找到答案。显式删除意味着什么?您必须逐个元素进行删除。示例:static::deleting(函数($question){foreach($question->answers()->get()as$answer){$answer->delete();}})代码>谢谢你的回答。显式删除意味着什么?您必须逐个元素进行删除。示例:static::deleting(函数($question){foreach($question->answers()->get()as$answer){$answer->delete();}})代码>