Как преобразовать код построителя запросов в Eloquent? - PullRequest
0 голосов
/ 20 сентября 2018

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

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

Метод «Добавить связь» получает массив со значениями категории и идентификатором товара

и после обработки эти данные добавляются в промежуточную таблицу

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');
        });

1 Ответ

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

Я сделал

public function store(Request $request)
    {
       $rules = [
           'description' => 'min:4',
           'image' => 'required|image|mimes:jpg,jpeg,png',
           'choose-category' => 'array|required'
           ];

        $messages = [
            'description.min' => 'Название должно содержать минимум :min символа.',
            'image.required' => 'Изображение загружать обязательно.',
            'image.image' => 'Вы загрузили не изображение.',
            'image.mimes' => 'Допустимые форматы: jpg, jpeg, png.',
            'choose-category.required' => 'Выберите категорию'
         ];

        Validator::make(
            $request->all(),
            $rules ,
            $messages
              )->validate();

      $image = $request->file('image');

      $description = $request->input('description');

      $this->imageClass->add($image, $description);

      $this->imageClass->save();

      $idNewImage = $this->imageClass->id;
      $categories = $request->input('choose-category');

      $relation = \App\Services\Image::find($idNewImage);

      $relation->categories()->attach($categories);

      //$this->imageClass->addRelation($categories, $idNewImage);

      return redirect('/');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...