Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Код работает, но некоторые говорят, что это плохой пример, и его нужно переписать в отношения, но я не знаю, как, вы можете сказать?
Статьи могут быть добавлены в разные категории
Метод addRelation получает массив с значениями категории и идентификатором статьи
и после обработки эти данные добавляются к промежуточной таблице
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('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
Schema::create('images', function (Blueprint $table) {
$table->increments('id');
$table->string('image');
$table->timestamps();
});
Schema::create('category_image', function (Blueprint $table) {
$table->increments('id');
$table->integer('image_id');
$table->integer('category_id');
});
Изменено Dimak (20.09.2018 11:24:40)
Не в сети
это типа меток длят статей
Не в сети
Вот такой запрос получился
(SQL: insert into `category_image` (`category_id`, `image_id`, `0`, `1`) values (18, 18, 1, 2)
Это неверный запрос, из-за этого выводит ошибку.
$relation = \App\Services\Image::find($idNewImage);
dd($relation->categories()->attach($idNewImage, $categories));
Надо что бы был примерно такой запрос
insert into `category_image` (`category_id`, `image_id`) values ( 2, 18)
И получается, если надо будет добавить во многие категории, то должно быть несколько запросов?
Не в сети