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

#laravel #laravel-5 #eloquent

#laravel #laravel-5 #красноречивый

Вопрос:

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

Вот мой код для заполнения таблиц поиска:

 foreach($request->category as $category)
   {
       $catphoto = new Category_Photo(['photo_id' => $photo->id, 'category_id' => $category]);
       $photo->categories()->save($catphoto);
   }

foreach($request->size as $size)
   {
       $photosize = new Photo_Size(['photo_id' => $photo->id, 'size_id' => $size]);
       $photo->sizes()->save($photosize);
   }
  

Вот пример данных, переданных в запросе:

 "category" => array:3 [▼
        0 => "1"
        1 => "2"
        2 => "3"
      ]
      "size" => array:4 [▼
        0 => "1"
        1 => "2"
        2 => "3"
        3 => "4"
      ]
  

Однако, пока вставки работают и таблицы поиска заполнены, каждая вторая вставленная строка содержит идентификатор ранее вставленной записи, например:

 id  photo_id  category_id
85  55        1
86  55        85
87  55        2
88  55        87
89  55        3
90  55        89
  

Что происходит и как я могу это исправить?

Ответ №1:

Вы не должны создавать новую запись в своей сводной таблице. вместо этого вы можете использовать attach()

 foreach($request->category as $category)
{
    $photo->categories()->attach($category);
    // ----- OR ---------
    $cat = Category::where('id',$category)->first();
    $photo->categories()->save($cat);
}
  

Вы можете прочитать больше из документации laravel здесь