Связывая модель дважды, CakePHP - PullRequest
1 голос
/ 27 ноября 2009

У меня есть следующая схема: Мой сайт - игра викторин, поэтому на каждый вопрос есть ответы "hasMany", но на вопрос также есть правильный ответ "hasOne", который также представлен моделью ответа.Я еще не проверял это, но инстинкт моего программиста говорит мне, что извлеченный массив будет отчасти избыточен, и он не отделит правильный ответ от остальных.

Мой вопрос: как мне представитьэто в моделях и в базе данных, есть ли лучший способ представить эти отношения?

Ответы [ 4 ]

1 голос
/ 01 декабря 2009

Или просто посмотрите на эту страницу, очень полезно;) http://www.charlesgarwood.com/blog/?p=23

1 голос
/ 27 ноября 2009

Ну, я могу придумать два способа сделать это.

  1. Вопрос имеет много ответов, в то время как вопрос относится к правильному ответу (для правильного ответа в вопросе укажите answer_id, чтобы он выглядел как Question(id, answer_id) и Answer(id, question_id))

  2. В ответе есть флажок, который отражает, является ли он правильным или нет.

Я думаю, что выбрать - это скорее личное мнение, но я бы, вероятно, выбрал номер 2, даже если 1 более корректен из-за реляционного мышления, но это уменьшает избыточность, и вы все равно можете искать ее в ответы.

Конечно, если вопрос может иметь более одного правильного ответа, то вариант № 1 исключается.

0 голосов
/ 01 декабря 2009

Попробуйте спросить на cakeqs.org, это портал, связанный с cakephp. Но определенно у вас должны быть разные псевдонимы для обеих ассоциаций

0 голосов
/ 29 ноября 2009

Другим способом было бы создать 2 модели, сопоставленные с одной и той же таблицей. В ответе должен быть флаг, указывающий, что это правильный ответ или нет.

Поскольку вы не будете переключаться, какой ответ является правильным, тогда сопоставление правильности с флагом во время создания будет хорошим, и позволит вам иметь несколько правильных ответов. С системой взвешивания вы даже можете оценить правильность ответа.

В двух отдельных моделях обязательно задайте условия для отношений или в самой модели, чтобы модель CorrectAnswer находила ответы только с полем Answer.correct = true. Затем вы можете иметь общую модель ответа, в которой нет такого условия. Готово в модели Вопроса, вы можете даже использовать только флаги ассоциации для извлечения обоих типов.

...