Большинство людей, вероятно, понимают это самостоятельно, но я абсолютный нуб, поэтому я дам этому вопросу шанс ради других нубов.
Я пытаюсь настроить Laravel пометка, система тегов для фреймворка Laravel, которая, вероятно, имеет структуру, аналогичную любой другой системе тегов. Поставляется с 2 таблицами:
tagging_tags
tagging_tagged
tagging_tags
где хранятся теги
tagging_tagged
вероятно, где хранятся статьи с тегами, но я не уверен.
Стол tagging_tagged
содержит столбец taggable_id
, который не является первичным ключом и не имеет автоматического приращения:
Field Type Null Key Default Extra
'id', 'int(10) unsigned', 'NO', 'PRI', NULL, 'auto_increment'
'taggable_id', 'int(10) unsigned', 'NO', 'MUL', NULL,
'taggable_type', 'varchar(255)', 'NO', 'MUL', NULL,
'tag_name', 'varchar(255)', 'NO', NULL,
'tag_slug', 'varchar(255)', 'NO', 'MUL', NULL,
Является taggable_id
внешний ключ статьи с тегом? Разве это не должно быть tagged_id тогда? Может кто-нибудь указать мне какое-то руководство для новичков, которое объясняет структуру системы тегов или просто объяснить, что taggable_id
для?
Я прошу прощения, если этот вопрос неуместен.
Это Polymorphic Relation
и это отношение позволяет модели принадлежать более чем одной другой модели в одной ассоциации.
Представь, что у тебя есть Post
а также Comment
модели и их оба могут иметь tags
,
Вы должны использовать только одну таблицу для обоих.
И taggable_id
столбец будет иметь значение идентификатора поста или комментария, а taggable_type
столбец будет содержать имя класса модели-владельца
Благодаря ответу почему я смог выяснить, что taggable_id
а также taggable_type
есть и как их использовать. Когда я пишу это, кажется, что Laravel — одна из немногих основных структур, которые используют полиморфные отношения. Но это кажется очень полезным с точки зрения минимизации объема кода, необходимого для реализации схемы базы данных.
Для тех, кого смущают полиморфные отношения в Laravel, вот видео на YouTube что я нашел полезным и вот часть документации Laravel об этом.