Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 20.09.2018 11:15:40

Как преобразовать код построителя запросов в Eloquent?

Код работает, но некоторые говорят, что это плохой пример, и его нужно переписать в отношения, но я не знаю, как, вы можете сказать?

Статьи могут быть добавлены в разные категории

Метод 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)

Не в сети

#2 20.09.2018 11:16:35

Re: Как преобразовать код построителя запросов в Eloquent?

это типа меток длят статей

Не в сети

#3 20.09.2018 16:08:27

Re: Как преобразовать код построителя запросов в Eloquent?

Вот такой запрос получился

(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)

И получается, если надо будет добавить во многие категории, то должно быть несколько запросов?

Не в сети

Подвал раздела