Для чего нужен taggable_id в системе тегов?

Большинство людей, вероятно, понимают это самостоятельно, но я абсолютный нуб, поэтому я дам этому вопросу шанс ради других нубов.

Я пытаюсь настроить Laravel пометка, система тегов для фреймворка Laravel, которая, вероятно, имеет структуру, аналогичную любой другой системе тегов. Поставляется с 2 таблицами:

  1. tagging_tags
  2. 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 для?

Я прошу прощения, если этот вопрос неуместен.

1

Решение

Это Polymorphic Relation и это отношение позволяет модели принадлежать более чем одной другой модели в одной ассоциации.

Представь, что у тебя есть Post а также Comment модели и их оба могут иметь tags,

Вы должны использовать только одну таблицу для обоих.

И taggable_id столбец будет иметь значение идентификатора поста или комментария, а taggable_type столбец будет содержать имя класса модели-владельца

2

Другие решения

Благодаря ответу почему я смог выяснить, что taggable_id а также taggable_type есть и как их использовать. Когда я пишу это, кажется, что Laravel — одна из немногих основных структур, которые используют полиморфные отношения. Но это кажется очень полезным с точки зрения минимизации объема кода, необходимого для реализации схемы базы данных.

Для тех, кого смущают полиморфные отношения в Laravel, вот видео на YouTube что я нашел полезным и вот часть документации Laravel об этом.

0

По вопросам рекламы [email protected]