Я пытаюсь изучить HABTM и Полиморфные отношения, создав небольшое, но сложное приложение в Laravel 4.2. Он принимает ссылки и позволяет пользователям взаимодействовать с контентом и друг с другом с помощью ключевых слов, таких как тег, комментарий, голосование, избранное и подписка. Я честно работал над этим в течение приблизительно 3 дней и чувствую, что я просто вращаю свои колеса в грязи. Вот разбивка —
Модели:
User, Link, Tag, Comment, Vote, Favorite, Follow
Супер базовые варианты использования:
USER -> ACTION -> TARGET
User -> Submit -> Link, Tag, Comment
User -> Tag -> User, Link
User -> Comment -> User, Link
User -> Vote -> Tag, Comment
User -> Favorite -> User, Link, Tag, Comment
User -> Follow -> User, Tag
(предполагается) Таблицы:
users [id, username]
links [id, user_id, url]
tags [id, user_id, text]
commentables [id, user_id, commentable, commentable_id, text] //how do i handle comment replies?
taggables [id, user_id, taggable, taggable_id, weight]
votables [id, user_id, voteable, voteable_od, vote]
favorables [id, user_id, favorable, favorable_id]
followable [id, user_id, followable, followable_id]
Отсюда .. Я не уверен, что я делаю это правильно. Я продолжаю увлекаться различными способами определения отношений, и я просто хочу полностью понять дизайн
Как выглядят мои файлы моделей? Какие случаи я мог бы использовать, принадлежат ToMany против morphToMany? Это даже правильный подход, или я должен исследовать, используя сводные таблицы? Я был бы признателен за некоторые советы о том, что мне нужно учиться, чтобы реализовать это правильно
Вот как будет выглядеть мой User.php, но я не уверен, каким должен быть результат на самом деле, так как я не совсем понимаю желания / потребности отношений
(предполагается) User.php
usersFavored() // Users which this User has Favored
usersFollowed() // Users which this User has Followed
linksSubmitted() // Links created by the User in the DB
linksFavored() // ...
tagsOnSelf() // Tags attached to this User by other Users
tagsCreated() // Tags which the User created in the DB
tags() // Tags which the User was the first to attach to a Link
tagsVoted() // Tags on which the User has Voted across the entire site
tagsFavored() // ...
tagsFollowed() // ...
commentsOnSelf() // ...
comments() // Comments across the site
commentsFavored() // ...
votesOnSelf() // ...
votes() // Votes across the site
favorites() // Favorites across the site
follows() // Follows across the site
Я чувствую, что я близок к тому, чтобы сделать эту работу. У меня есть готовые виды и маршруты, потому что я перестраивал этот проект примерно четыре раза. Мне просто нужно бороться со всей этой логикой взаимоотношений с базой данных, чтобы я мог оживить приложение. Ваш вклад очень ценится!
вот некоторые из моих мыслей
Надеюсь это поможет. Готов помочь, если у вас есть еще вопросы
Других решений пока нет …