Связывание модели (т.е. комментарий) со многими другими моделями (например, пост, профиль)

0

Я строй приложения PHP с Laravel, где у меня есть Comment модель и много других моделей, к которым Comment может быть присоединен к.

Например, в Profile может быть много Comment но также в Post может быть много Comment.

Должен ли я разделять Comment в двух моделях (ProfileComment и PostComment), или я должен держать их вместе?

class Comment {

    public function user()
    {
        return $this->hasOne('User');
    }

    public function profile()
    {
        return $this->belongsTo('Profile');
    }

    public function post()
    {
        return $this->belongsTo('Post');
    }

}

Если я держу их вместе, то на уровне базы данных, как мне управлять таблицей comments?

Я думал о следующих столбцах:

integer: id - auto-incrementing id
integer: user_id - the user id
integer: foreign_id - profile/post id
varchar: type - which model? profile or post?
varchar: content - the actual comment

Это неправильный подход?

Теги:
model-view-controller
orm
database-design
laravel-4

1 ответ

0
Лучший ответ

если вы хотите использовать 1 таблицу, вам понадобится сделать морфинг модели Comment. если вы не хотите использовать морфинг, разделите его.

Я думаю, что если вы будете использовать схему из своего вопроса, вы будете использовать морф.

Я не знаю, где нужно делать больше таблиц, потому что все комментарии будут иметь одинаковую структуру (id, user_id (автор), комментарий)

поэтому в этом случае вам нужно просто сделать его морфинг (tagable).

  • 0
    Правильный ли мой подход тогда? Потому что как-то мне нужно знать, к какой модели прикреплен комментарий.
  • 0
    если вы используете Morph, вам не придется беспокоиться о «привязке к», потому что вы сделаете что-то вроде этого: Post :: comments () или Profile :: comments (). остальное сделает его. в базе данных у вас будет такая структура: id user_id комментарий commentable_id commentable_type
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню