Код работает, но некоторые говорят, что это плохой пример, и его нужно переписать в отношения, но я не знаю как, вы можете сказать?
Статьи могут быть добавлены в различные категории
Метод «Добавить связь» получает массив со значениями категории и идентификатором товара
и после обработки эти данные добавляются в промежуточную таблицу
array:2 [▼
0 => "1"
1 => "2"
]
public function addRelation($categories, $id)
{
$categoryId = [];
$collection = collect($categories);
$collection = $collection->chunk(1);
$collection->each(function ($item, $key) use (&$categoryId, $id){
$categoryId[] = [
'image_id' => $id,
'category_id' => $item->first()
] ;
}
);
DB::table('category_image')->insert($categoryId);
}
удаление
public function deleteImage($image)
{
Storage::delete($image->image);
$this->destroy($image->id);
DB::table('category_image')->where('image_id', $image->id)->delete();
}
Модели
class Image extends Model
{
public function categories()
{
return $this->belongsToMany(Category::class);
}
}
class Category extends Model
{
protected $fillable = ['name'];
public $timestamps = false;
public function article()
{
return $this->belongsToMany('App\Services\Image');
}
}
//////////////////////////////////////////////////////////////////////
Schema::create('category_image', function (Blueprint $table) {
$table->increments('id');
$table->integer('image_id');
$table->integer('category_id');
});
Schema::create('category_image', function (Blueprint $table) {
$table->increments('id');
$table->integer('image_id');
$table->integer('category_id');
});
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});