Php 删除前是否需要取消链接?拉威尔5.2
这应该是一个相当简单的问题,我可能对文档中回答我的问题的确切位置很愚蠢/视而不见,但是:Php 删除前是否需要取消链接?拉威尔5.2,php,laravel,Php,Laravel,这应该是一个相当简单的问题,我可能对文档中回答我的问题的确切位置很愚蠢/视而不见,但是: Blog has many tags, tags belong to blog post has many tags, tags belong to post 如果我这样做:TagModel::where('id',$id)->first()->delete()这会处理这些关系吗?如果我这样做:BlogsModel::where('id',$blogId)->标记,甚至查看帖子,我都不会看到已删除标记的关
Blog has many tags, tags belong to blog
post has many tags, tags belong to post
如果我这样做:TagModel::where('id',$id)->first()->delete()代码>这会处理这些关系吗?如果我这样做:BlogsModel::where('id',$blogId)->标记
,甚至查看帖子,我都不会看到已删除标记的关系,或者我需要先从博客和帖子中取消链接,然后再删除吗
我想laravel不会先给我取消链接的???关键是模型事件删除
:
/**
* Events
*/
public static function boot()
{
parent::boot();
static::deleting(function($model) {
foreach($model->tags as $tag) {
$tag->delete();
}
}
}
此代码可以存在于模型本身中,也可以将其提取到模型观察者中。关键是模型事件删除:
/**
* Events
*/
public static function boot()
{
parent::boot();
static::deleting(function($model) {
foreach($model->tags as $tag) {
$tag->delete();
}
}
}
此代码可以存在于模型本身中,也可以将其提取到模型观察者中。larvel relationship用于调用关系成员,而不用于删除,如果要自动删除关系表,有两种方法:
您需要在具有on delete功能的数据库上添加关系
$table->foreign('blog_id')->references('id')->on('blog')->onDelete('cascade');
$table->foreign('post_id')->references('id')->on('blog')->onDelete('cascade');
或
您可以在模型中添加删除功能
您需要将此功能添加到标记模型中:
// Adding relation from tags to post
public function post()
{
return $this->belongsTo( PostModel::class, 'post_id' );
}
// Adding relation from tags to blog
public function blog()
{
return $this->belongsTo( BlogModel::class, 'blog_id' );
}
// Deleting relation table blog and post
protected static function boot() {
parent::boot();
static::deleting( function( $tag ) {
$tag->blog()->delete();
$tag->post()->delete();
});
}
因此,当您运行此函数时:
TagModel::where('id', $id)->first()->delete();
相关的博客和帖子将自动删除
如果要删除标签以及未删除的相关博客和帖子,请不要在数据库中建立它们之间的任何关系。Laravel关系用于调用关系成员,它不用于删除,如果要自动删除关系表,有两种方法:
您需要在具有on delete功能的数据库上添加关系
$table->foreign('blog_id')->references('id')->on('blog')->onDelete('cascade');
$table->foreign('post_id')->references('id')->on('blog')->onDelete('cascade');
或
您可以在模型中添加删除功能
您需要将此功能添加到标记模型中:
// Adding relation from tags to post
public function post()
{
return $this->belongsTo( PostModel::class, 'post_id' );
}
// Adding relation from tags to blog
public function blog()
{
return $this->belongsTo( BlogModel::class, 'blog_id' );
}
// Deleting relation table blog and post
protected static function boot() {
parent::boot();
static::deleting( function( $tag ) {
$tag->blog()->delete();
$tag->post()->delete();
});
}
因此,当您运行此函数时:
TagModel::where('id', $id)->first()->delete();
相关的博客和帖子将自动删除
如果你想删除标签和相关的博客以及未被删除的帖子,就不要在数据库中建立它们之间的任何关系。你可以很容易地对自己进行测试,或者你可以很容易地回答这个问题。知道给人一条鱼的寓言吗?再说一遍,说起来非常简单,看看文档,或者答案就在这里,也看看这里。足够多的“寓言”更多的答案。你可以很容易地为自己测试这个问题,或者你可以很容易地回答这个问题。你知道给人一条鱼的寓言吗?再说一遍,在文档中说“看这里”非常简单,或者答案在这里,也可以看这里。足够多的“寓言”和更多的答案。