Php 如何删除laravel 5.7中3个关系表中的数据

Php 如何删除laravel 5.7中3个关系表中的数据,php,sql-server,laravel,laravel-5,Php,Sql Server,Laravel,Laravel 5,我尝试使用laravel 5.7删除3个关系表上的数据,当我在2个关系表上尝试时,它运行良好,但当我在3个关系表中尝试时,它不起作用 这是我的桌子,看起来像: 表1:组访问 |----|------------| | id | group_name | |----|------------| | 67 | test | |----|------------| |----|-----------------|--------| | id | group_access_id | name

我尝试使用laravel 5.7删除3个关系表上的数据,当我在2个关系表上尝试时,它运行良好,但当我在3个关系表中尝试时,它不起作用

这是我的桌子,看起来像:

表1:组访问

|----|------------| | id | group_name | |----|------------| | 67 | test | |----|------------| |----|-----------------|--------| | id | group_access_id | name | |----|-----------------|--------| | 1 | 67 | john | |----|-----------------|--------| |----|-----------------|---------------| | id | group_access_id | code_survey | |----|-----------------|---------------| | 1 | 67 | SF-001 | |----|-----------------|---------------| 我得到一个错误sql,如下所示:

SQLSTATE[23000]:[Microsoft][ODBC驱动程序11 for SQL Server][SQL 服务器]DELETE语句与引用约束冲突 “调查组访问组访问标识外来”。冲突发生了 在数据库“aetra2”中,表“dbo.survey\u group\u access”列 “组访问id”。(SQL:从[group_access]中删除,其中[id]=67)


如何修复此错误?

在组访问模型中定义关系

public function fa_group_access()
{
return $this->hasMany('fa_group_access');
}

public function survey_group_access()
{
return $this->hasMany('survey_group_access');
}
删除记录和相关文件:

$group_access = Group_access::find($id);

// delete related   
$group_access->fa_group_access()->delete();
$group_access->survey_group_access()->delete();

$group_access->delete();
我不测试代码,可能有语法错误,但它应该是 像这样的东西


我希望这会有所帮助

这感觉像是一个很好的使用案例。我的做法如下:

<?php 
namespace App\Models\Administrator;
use Illuminate\Database\Eloquent\Model;
use App\Models\Administrator\Users;

class Groups extends Model
{
    protected $table = 'group_access';

    public static function boot() {
        parent::boot();

        static::deleting(function($groups) { 
            $groups->survey_group_access()->delete();
            $survey_group_access->users()->delete(); 
        });
    }

    public function fa_group_access()
    {
        return $this->hasMany(FA_Group_Access::class,'group_access_id','id');
    }

    public function survey_group_access()
    {
        return $this->hasMany(Survey_group_access::class,'group_access_id','id');
    }
}

您可以使用删除时的级联来完成此操作。你可以从这里参考

您可以更新迁移:(虽然我的类名只是假设,但您可以理解,而且我假设您是从迁移而不是从phpMyAdmin创建数据库的)

类FAGroupAccessTable 调查访问组
执行此操作后,每当您尝试使用
$group_access->delete()删除时这两个相关数据将自行删除。

显示这3个表的迁移文件从表1中删除时,您是否尝试删除表2和表3中的数据?这可以通过删除时的级联来实现。@InzamamIdrees我在中更新了我的模型post@SarojShrestha是,我想从表1中删除数据,表2和表3将使用表1中的引用id自动删除您只需在删除时添加带有级联的外键,然后简单地删除组访问行,它会自动删除其他不同表上的相关记录。没问题Brother@RahmatEffendi
<?php 
namespace App\Models\Administrator;
use Illuminate\Database\Eloquent\Model;
use App\Models\Administrator\Users;

class Groups extends Model
{
    protected $table = 'group_access';

    public static function boot() {
        parent::boot();

        static::deleting(function($groups) { 
            $groups->survey_group_access()->delete();
            $survey_group_access->users()->delete(); 
        });
    }

    public function fa_group_access()
    {
        return $this->hasMany(FA_Group_Access::class,'group_access_id','id');
    }

    public function survey_group_access()
    {
        return $this->hasMany(Survey_group_access::class,'group_access_id','id');
    }
}
public function destroy($id)
{
    $group = Groups::findOrFail($id);

    if($group->delete()) {  
        return response()->json(['status'=>'success']);    
    }   
}
public function up()
    {
        Schema::create('fa_gropu_access', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('group_access_id')->unsigned()->index();
            $table->string('name');
            $table->foreign('group_access_id ')->references('id')->on('group_access')->onDelete('cascade');
        });
    }
public function up()
    {
        Schema::create('survey_access_group', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('group_access_id ')->unsigned()->index();
            $table->string('code_survey');
            $table->foreign('group_access_id ')->references('id')->on('group_access')->onDelete('cascade');
        });
    }