Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在删除图像时删除基于外键的记录?_Php_Laravel_Eloquent - Fatal编程技术网

Php 如何在删除图像时删除基于外键的记录?

Php 如何在删除图像时删除基于外键的记录?,php,laravel,eloquent,Php,Laravel,Eloquent,从images表中删除一条记录后,我在tag_image表中留下一条记录,该记录将不再存在的图像连接到标记。我想在删除图像时以某种方式删除该连接 Table: images Columns: id, Title, Path Table: tags Columns: id, name Table: tag_image Columns: image_id, tag_id 我的删除图像功能: public function deleteImage($imageId){ $imag

从images表中删除一条记录后,我在tag_image表中留下一条记录,该记录将不再存在的图像连接到标记。我想在删除图像时以某种方式删除该连接

Table: images
Columns: id, Title, Path

Table: tags
Columns: id, name

Table: tag_image
Columns: image_id, tag_id
我的删除图像功能:

public function deleteImage($imageId){
        $image = Image::where('id', $imageId)->first();
        if (!Auth::user()->hasRole('Admin')) {
            if (Auth::user() != $image->user){
                return redirect()->back();
            }
        } else if (Auth::user()->hasRole('Admin')) {
            $imageName = $image->file_name;
            $image->delete();
            Storage::delete('public/images/uploaded/'.$imageName);
            return redirect()->route('home');
        }
        $imageName = $image->file_name;
        $image->delete();
        Storage::delete('public/images/uploaded/'.$imageName);
        return redirect()->route('home');
    }
标签型号:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    public function images(){
        return $this->belongsToMany('App\Image', 'tag_image','tag_id','image_id');
    }
}

在像这样删除之前,应该先分离

$image = Image::where('id', $imageId)->first();
$image->tags()->detach();

阅读材料


在这样删除之前,应该先分离

$image = Image::where('id', $imageId)->first();
$image->tags()->detach();

阅读材料


如果您使用迁移,您可以在关系模型中执行以下操作:

$table->foreign('image_id')
      ->references('id')->on('image')
      ->onDelete('cascade');
甚至可以直接在数据库中定义删除级联关系

ALTER TABLE image_tag
   ADD CONSTRAINT `fk_image`
   FOREIGN KEY (`image_id`)
   REFERENCES `image` (`id`)
   ON DELETE CASCADE
有关迁移的更多信息:


如果您使用迁移,您可以在关系模型中执行以下操作:

$table->foreign('image_id')
      ->references('id')->on('image')
      ->onDelete('cascade');
甚至可以直接在数据库中定义删除级联关系

ALTER TABLE image_tag
   ADD CONSTRAINT `fk_image`
   FOREIGN KEY (`image_id`)
   REFERENCES `image` (`id`)
   ON DELETE CASCADE
有关迁移的更多信息:


简单。。删除图像查询后,为标记运行另一个。\u定义关系并正确层叠,以便在删除父项时自动删除子项。简单。。删除图像查询后,为标记运行另一个。\u定义关系并正确层叠,以便在删除父项时自动删除子项。您能否提供一些源/文档链接以供进一步阅读?@Script47我的意思是为了改进您的答案。别担心,我会加进去的。我原以为会更复杂一点。第一个例子很有魅力。我不明白第二个例子,我从哪里得到$tag_id变量?我只是将$imageId变量传递给该函数。您能提供一些源代码/文档链接供进一步阅读吗?@Script47我的意思是为了改进您的答案。别担心,我会加进去的。我原以为会更复杂一点。第一个例子很有魅力。我不明白第二个例子,我从哪里得到$tag_id变量?我只是将$imageId变量传递给该函数。