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();
    
    相关的博客和帖子将自动删除


    如果你想删除标签和相关的博客以及未被删除的帖子,就不要在数据库中建立它们之间的任何关系。

    你可以很容易地对自己进行测试,或者你可以很容易地回答这个问题。知道给人一条鱼的寓言吗?再说一遍,说起来非常简单,看看文档,或者答案就在这里,也看看这里。足够多的“寓言”更多的答案。你可以很容易地为自己测试这个问题,或者你可以很容易地回答这个问题。你知道给人一条鱼的寓言吗?再说一遍,在文档中说“看这里”非常简单,或者答案在这里,也可以看这里。足够多的“寓言”和更多的答案。