Я использую Laravel Framework для Backend.
У меня есть 4 таблицы:
1. Продукт
2. Product_colors
3. Изображения
4. Image_product_color
Я хочу удалить данные, которые есть в таблице: изображения и Image_product_color
пошел я пытаюсь удалить эти данные, я могу удалить их из image_product_color
, но я не могу удалить данные из таблицы изображений. В чем проблема?
вот моя схема базы данных:
1. Продукты
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->string('product_code')->unique();
$table->text('name');
$table->text('slug');
$table->bigInteger('base_price');
$table->integer('weight')->nullable();
$table->text('description')->nullable();
$table->smallInteger('status')->default(0);
$table->timestamps();
});
2. Product_colors
Schema::create('product_colors', function (Blueprint $table) {
$table->increments('id');
$table->integer('product_id')->unsigned();
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
$table->string('base_color');
$table->string('original_color');
$table->timestamps();
});
3. Изображения
Schema::create('images', function (Blueprint $table) {
$table->increments('id');
$table->binary('image');
$table->timestamps();
});
4. Image_product_color
Schema::create('image_product_color', function (Blueprint $table) {
$table->increments('id');
$table->integer('product_color_id')->unsigned();
$table->foreign('product_color_id')->references('id')->on('product_colors')->onDelete('cascade');
$table->integer('image_id')->unsigned();
$table->foreign('image_id')->references('id')->on('images')->onDelete('cascade');
$table->timestamps();
});
МОДЕЛЬ:
ProductColor
class ProductColor extends Model
{
protected $fillable=[
'product_id','base_color','original_color'
];
public function products()
{
return $this->belongsTo(Product::class,'product_id');
}
public function images()
{
return $this->belongsToMany(Image::class);
}
public function productsizes()
{
return $this->hasMany(ProductSize::class);
}
}
Изображение
class Image extends Model
{
protected $fillable=[
'image'
];
public function categories()
{
return $this->belongsToMany(Category::class);
}
public function productcolors()
{
return $this->belongsToMany(ProductColor::class);
}
}
Я использую красноречивый метод:
вот мой код:
$productcolor = ProductColor::findOrFail($id);
$total_product_variant = Productcolor::where('product_id',$productcolor->product_id)->get();
if (count($total_product_variant) === 1) {
Product::destroy($productcolor->product_id);
}
if (count($productcolor->images) > 0) {
foreach ($productcolor->images as $images) {
$url = public_path().'/upload/products/'.$images->image;
if (file_exists($url)) {
unlink($url);
$productcolor->images()->detach($images->id);
Image::destroy($images->id);
// Image::delete($images->id);
}else {
$productcolor->images()->detach($images->id);
Image::destroy($images->id);
// Image::delete($images->id);
}
}
}
ProductColor::destroy($id);
return response()->json([
'status'=>'success'
]);
}