从我的图像表中删除记录后,我在tag_image表中留下了一条记录,该记录将不再存在的图像连接到标记。当我删除图像时,我想以某种方式删除该连接。
Table: images
Columns: id, Title, Path
Table: tags
Columns: id, name
Table: tag_image
Columns: image_id, tag_id
我的deleteImage功能:
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');
}
}
图片模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Image extends Model
{
public function user(){
return $this->belongsTo('App\User');
}
public function tags(){
return $this->belongsToMany('App\Tag','tag_image','image_id','tag_id');
}
}
答案 0 :(得分:1)
你应该在删除之前分开
$image = Image::where('id', $imageId)->first();
$image->tags()->detach();
或
$image->tags()->detach($tag_id);
阅读材料
答案 1 :(得分:1)
如果您正在使用迁移,则可以使用关系模型:
$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
有关迁移的更多信息: