Удалить данные из таблицы мастера имеют отношение многие ко многим - PullRequest
0 голосов
/ 01 сентября 2018

Я использую 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'
        ]);

    }

1 Ответ

0 голосов
/ 05 сентября 2018

Вы допустили ошибку при вводе идентификатора изображения: Image::destroy($images->id); в сводной таблице вы называете идентификатор изображения с image_id $table->integer('image_id')->unsigned();

тогда в этом разделе: Image::destroy($images->id); должно быть: Image::destroy($images->image_id);

если вы используете $images->id, то вы удаляете неправильные данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...