Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте, я новичок. Многократно видел такую ситуацию. Например. Имеем блог. Создаем миграцию для поста(стандартную), затем миграцию для тэгов. И нужно еще создать миграцию связи типа "Пост-тег". Только я не понимаю, что именно мы решаем таким образом и чем это удобно? Если миграцию поста и тэга я понимаю, что к чему, тов миграции пост-тег, вообще не понимаю, что там происходит и зачем она нужна.
Спасибо большое за внимание!
Не в сети
1 пост может иметь несколько тегов.
Постов может быть много.
Такая таблица называется многие-ко-многим
Не в сети
@JohnnyDoe, это не из-за Laravel, а происходит из особенностей реляционных баз данных. Многие-ко-многим в РСУБД делаются через таблицу-связку, иначе говоря, pivot. Ларавель только предоставляет доступ к БД. Если в базе должна быть таблица, значит должна быть и миграция чтобы её создать.
Совет: если в миграции для таблицы-связки ты объявишь уникальный составной индекс на пару полей (post_id, tag_id), то избежишь потенциальных проблем с дублированием записей.
Изменено artoodetoo (29.05.2020 07:35:57)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
@JohnnyDoe, это не из-за Laravel, а происходит из особенностей реляционных баз данных. Многие-ко-многим в РСУБД делаются через таблицу-связку, иначе говоря, pivot. Ларавель только предоставляет доступ к БД. Если в базе должна быть таблица, значит должна быть и миграция чтобы её создать.
Совет: если в миграции для таблицы-связки ты объявишь уникальный составной индекс на пару полей (post_id, tag_id), то избежишь потенциальных проблем с дублированием записей.
Ого очень признателен за подробный ответ. Может есть где почитать об этом?
Получается схема, если я делаю таблицу пост и там создаю ключ tag_id, и потом во время добавления поста ставлю туда условие "вставать в поле tag_id, где tag_id = id(тут переменная айдишника тэга из таблицы tag)", так не пойдёт? Или это считается дурным тоном и непрактично?
Не в сети
это не дурной тон, это связь один-ко-многим.
Таким способом можно для 1 поста указать только 1 тэг.
То есть таблица Post будет выглядеть так:
id, tag_id
1 , 1
2 , 1
3 , 2
4 , 3
Таким образом создать одному посту несколько разных тегов будет невозможно.
Не в сети
Таким образом создать одному посту несколько разных тегов будет невозможно.
Ааа то есть, благодаря такой таблице, можно будет уже несколько тегов назначить?
Где можно посмотреть примеры реальных таблиц, их архитектура? А-то я чем больше изучаю, тем больше понимаю. что вообще не шарю.
Не в сети
Post
id, title
1, Юность
2, Молодость
3, В расцвете сил
4, Старость
Tag
id, name
1, кино
2, вино
3, домино
4, клестир
5, сортир
PostTags
post_id, tag_id
1, 1
2, 1
2, 2
3, 2
3, 3
4, 4
4, 5
Не в сети
Хм, получается, когда мы добавляем данные, надо также добавлять и в эту таблицу данные в тот же самый момент?
Не в сети
Нет, не получается.
В таблицу связей можно накидать теги в любой момент после создания записи в постах.
Это можно сделать сразу, можно через любой промежуток времени после.
Не в сети
Нет, не получается.
В таблицу связей можно накидать теги в любой момент после создания записи в постах.
Это можно сделать сразу, можно через любой промежуток времени после.
Всё теперь всё понял, спасибо большое!
Не в сети
Страницы 1