#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 здесь