Laravel 删除功能不起作用

Jav*_*ved 2 php laravel

laravel 上的第一个项目:当我要删除行时,它会抛出错误:SQLSTATE[23000]:完整性约束违规:1451 无法删除或更新父行:外键约束失败。我的控制器功能

 public function delete(Request $request) {
    try {
        Venue::findOrFail($request->id)->delete();
    } catch (\Exception $ex) {
        return response()->json([
                'error' => $ex->getCode(),
                'message' => $ex->getMessage()
            ]);
    }

    return response()->json([
            'message' => trans('admin.venue.delete_success')
        ]);
}
Run Code Online (Sandbox Code Playgroud)

模型 :

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

    self::deleting(function (Venue $venue) {
        $venue->occasions()->delete();
        $venue->contact()->delete();
        $venue->gallery()->delete(); // here i am gtng error
        $venue->venueParameter()->delete();
    });
}
Run Code Online (Sandbox Code Playgroud)

详细错误:

SQLSTATE[23000]: 完整性约束冲突: 1451 无法删除或更新父行: 外键约束失败 ( red_carpet. media, CONSTRAINT media_gallery_id_foreignFOREIGN KEY ( gallery_id) REFERENCES galleries( id)) (SQL: 从 galleries. galleries= source_id2 且 galleries.source_id不为空且galleries. source_type=应用程序\地点)

表的架构:

Schema::create('venues', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('client_id');
        $table->string('name');
        $table->string('logo');
        $table->unsignedInteger('venue_type_id');
        $table->boolean('is_premium');
        $table->boolean('is_verified');
        $table->string('tripadvisor_url')->nullable();
        $table->enum('status',['Active','Inactive']);
        $table->timestamps();

        $table->foreign('client_id')->references('id')->on('clients');
        $table->foreign('venue_type_id')->references('id')->on('venue_types');
    });

  Schema::create('galleries', function (Blueprint $table) {
        $table->increments('id');
        $table->string('source_type');
        $table->unsignedInteger('source_id');
        $table->string('title');
        $table->unsignedInteger('sort_order');
        $table->enum('status',['Active','Inactive']);
        $table->timestamps();
    });
    Schema::create('media', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('gallery_id');
        $table->enum('type',['Image','Video']);
        $table->string('caption');
        $table->string('path')->nullable();
        $table->string('thumbnail')->nullable();
        $table->longText('video_code')->nullable();
        $table->boolean('is_banner_image')->default(false);
        $table->boolean('is_thumb_image')->default(false);
        $table->unsignedInteger('sort_order');
        $table->enum('status',['Active','Inactive']);
        $table->timestamps();

        $table->foreign('gallery_id')->references('id')->on('galleries');
    });
Run Code Online (Sandbox Code Playgroud)

BIB*_*NJU 5

如果您从一个表中删除与另一表链接的项目,则会出现此错误。

如果您使用的是数据透视表,请使用 onDelete('cascade') ,例如,

$table->foreign('foreign_key')->references('primary_key')->on('table_name')->onDelete('cascade');
Run Code Online (Sandbox Code Playgroud)

参考

  • 在您的架构配置中 (2认同)