Ассоциации в модели данных, как одна строка может указывать на разные внешние ключи? - PullRequest
0 голосов
/ 10 марта 2012

Дело:

Я действительно застрял в размышлениях о том, как правильно связать две таблицы в моей модели данных, рассмотрим этот пример (который абстрагирован от проблемы)

Скажи, что у меня есть:

  • некоторая модель под названием ' Attachment ', которая содержит 'attachment_id', 'attachment_title', .... и т. Д.,
  • и другая модель с именем ' Вопрос ', которая содержит 'question_id', 'attachment_id' (иностранный), 'question_option1', 'question_option2', 'question_option2', 'correct_answer' и т. Д.

Я уже знаю, что каждый «вопрос» может иметь привязанность к вопросу, поэтому у нас пока есть следующие отношения:

в модели вопроса:

var $belongsTo = array(
    'Attachment' => array(
        'className' => 'Attachment',
        'foreignKey' => 'attachment_id',
        'conditions' => '',
        'fields' => '',
        'order' => '',
    ),

и у меня в приложении модель:

var $hasOne = array(
    'Question' => array(
        'className' => 'Question',
        'foreignKey' => 'attachment_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),

Проблема:

Затем возникло новое требование: поместите изображения для каждого параметра в «Вопрос», чтобы вместо этого мы могли отображать изображения, а не текст, что означает, что мы добавляем новые строки в таблицу «Вопрос» (по крайней мере, то, что я сделал) который называется 'question_option1_attachment', 'question_option2_attachment', 'question_option3_attachment', и эти ячейки будут содержать внешний ключ, который указывает на attachment_id.

конечно, это не сработало для меня:

'foreignKey' => array('attachment_id', 'question_option1_attachment', 'question_option2_attachment', 'question_option3_attachment') ...

Вопрос:

Как связать один вопрос с множеством строк, указывающих на разные внешние ключи? что вы предлагаете, мне нужно как-то переопределить всю ассоциацию?

1 Ответ

0 голосов
/ 10 марта 2012


Как и в случае, указанном выше, я думаю, что вам потребуется создать еще одну таблицу, в которой хранятся данные, определяющие соответствие между различными вопросами и внешними ключами.
В этой таблице будут только идентификаторы, сопоставленные с вопросами, и во время вызова модели вам потребуется принять во внимание таблицу, поэтому проверьте, какие ключи связаны с вопросом. В них будет несколько записей для вопроса, поэтому вам придется использовать СОЕДИНЕНИЯ для получения соответствующих данных.

...