我有三张桌子
书籍:-id-姓名-已删除
帖子:-id-图书id-连接-删除地址
评论:-id-帖子id-评论-已删除
一本书有很多帖子,一篇帖子有很多评论。
当我删除一本书时,我想删除与该书相关的帖子和评论。我已经在所有模型中添加了关系,所有表都使用SoftDelete,并尝试在Laravel中使用事件
// Book Model
protected static function boot() {
parent::boot();
static::deleting(function($book) {
$book->posts()->delete();
});
}
// Post Model
protected static function boot() {
parent::boot();
static::deleting(function($post) {
$post->comments()->delete();
});
}
当我尝试删除一本书时:
$book = Book:find($bookId);
$book->delete()
书籍和帖子已删除,但评论不会被删除。我可以用Laravel事件删除评论吗?感谢您的阅读!
您可以使用michaeldyrynda制作的这个整洁的小特性,称为laravel-catcade-soft-deles。
GitHub自述文件中的示例代码:
<?php
namespace App;
use App\Comment;
use Iatstuti\Database\Support\CascadeSoftDeletes;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes, CascadeSoftDeletes;
protected $cascadeDeletes = ['comments'];
protected $dates = ['deleted_at'];
public function comments()
{
return $this->hasMany(Comment::class);
}
}
您应该将DELETE触发器上的模型关系设置为CASCADE。否则,您将需要迭代相关记录并逐个删除它们。
$model->related->each(function ($related) { $related->delete(); });
编辑:你对模型事件的想法是正确的,但是先删除帖子,然后再反向工作到书籍
protected static function boot() {
parent::boot();
static::deleting(function($post) {
$post->comments()->delete();
});
}
确保您的模型都具有“软删除特征”和“日期”属性:
use SoftDeletes;
protected $dates = ['deleted_at'];
您正在Post
模型的delete事件中传递不同的变量。
// Post Model
protected static function boot() {
parent::boot();
static::deleting(function($post) {
// $book->comments()->delete();
$post->comments()->delete();
});
}
问题内容: 我要删除具有多对多关系的一个站点上的表中的一行。我还想删除该关系另一侧的所有相关行。 例如,假设我有以下表格,并且想从中删除一行。我也想从中删除所有相关的行,当然,也删除其中不再需要的任何行。 我知道如何在查询中连接以上表格。但是我看不到如何删除整个关系中的数据。 注意:关系的两端都实现级联删除。因此,例如,从中删除行将删除中的任何相关行。但是显然,这不会传播到表中。 问题答案: 我认
问题内容: 在一个模型中,我有这个: 如果我选择: 有用。 如何从关系中删除所有对象?不管用。 问题答案: 首先,你需要使用或来清除关系,根据docs,哪种更适合你的需求。 之后,你需要使用删除对象。方法。
我的实体: 这就是我的问题,实际上很少有。 问题1: 我删除了一个Cat对象,设置了cascade类型。所有在Cat中拥有的列表中,因此当我删除Cat对象时,UC中带有Cat的所有记录都将被删除,但我得到“已删除的对象将通过级联重新保存”,这是因为我在UC中与用户有另一个关系,用户将UC存储在列表中。当我从UC中删除Cat对象和记录时,我不想删除用户对象,因此在UC中的@ManyToOne上设置c
在一个理论实体中,我有这样的配置: 当我删除实体时,它会尝试首先删除表,而不是连接的表,因此我会得到以下错误:
问题内容: 问题: 我 在* 两个实体 A和B 之间 有 多对多关联 。我将 A实体 设置为其 关系 的 所有者 (inverse = true在b.hbm.xml中A的集合上)。 * 当我 删除一个A实体时 , 联接表中的 相应 记录也会被删除 。 当我 删除一个B实体时 , 联接表中的 相应 记录不会被删除 (完整性违反异常)。 - 让我们考虑一些非常简单的 示例 : 文件 a.hbm.xml
我正在使用hibernate多对多的关联。我有3个表(STUDENT,COURSE和STUDENT_COURSE)。在3个表中,2个是主表,1个是提供关系的中间表。当记录从STUDENT中删除时,相应的映射将从Student_Course中删除。我的要求是它甚至应该从课程表中删除记录。考虑以下STUDENT_COURSE条目: 当从学生表中删除101时,上述表中的第一个条目被删除,但课程表中对应于