laravel删除关联模型的数据

 作者:Blue

 上传时间:2017-08-01

 标签: Laravel 5.4 代码片段

删除关联数据表的数据在项目中是很常见的操作,laravel eloquent对此处理相当的方便。
下面以一个例子说明:删除一个模块模型(Module)的数据,然后自动删除关联模型(Category)的数据。
Module模型代码。

<?php

namespace App\Entities;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Prettus\Repository\Contracts\Transformable;
use Prettus\Repository\Traits\TransformableTrait;

class Module extends Model implements Transformable
{
    use TransformableTrait, SoftDeletes;

    public $table = 'modules';

    protected $fillable=[
        'name','list','article','cover',
    ];

    protected $dates = ['deleted_at'];

    protected static function boot()
    {
        parent::boot(); // TODO: Change the autogenerated stub
        //删除关联category
        self::deleting(function($model){
            $model->categories()->detach();
        });
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function categories(){
        return $this->belongsToMany('App\Entities\Category', 'categories');
    }
}

其实也就是创建一个blongsToMany的关系,然后在boot方法中利用detach()方法删除关联模型。类似这样的操作还可以创建和修改关联模型的数据。具体查看参考文献。
注:detach()好像只能在belongsToMany()中使用,如果关联表不是按照默认需要指定下表名称需写出,如$this->belongsToMany(‘App\Entities\Category’, ‘categories’)指出关联表的名称。默认的表名称为category_module即可不写,这是因为该出默认设置了的关联表的表名称默认格式。
参考文献:
中文文档:http://laravelacademy.org/post/6979.html
Laravel Api:https://laravel.com/api/5.4/Illuminate/Database/Eloquent/Relations/BelongsToMany.html


欢迎支付宝打赏


   常用下载
  • wkhtmltox 一款将html转换成pdf的软件,laravel有相关支持包  
  • linux一键环境OneinStack(支持lnmp,lamp)