Php 如何在删除图像时删除基于外键的记录?
从images表中删除一条记录后,我在tag_image表中留下一条记录,该记录将不再存在的图像连接到标记。我想在删除图像时以某种方式删除该连接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
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变量传递给该函数。