Понимание отношений Kohana ORM

Я знаю, что этот вопрос задавали миллион раз, но я не могу найти тот, который действительно дает мне хорошее понимание того, как работают отношения в модуле ORM Kohana.

У меня есть база данных с 5 таблицами:

approved_submissions
   -submission_id
   -contents

favorites
   -user_id
   -submission_id

ratings
   -user_id
   -submission_id
   -rating

users
   -user_id

votes
   -user_id
   -submission_id
   -vote

Прямо сейчас favorites, ratings и votes имеют первичный ключ, который состоит из каждого столбца в таблице, чтобы пользователь не отдавал предпочтение одному и тому же submission_id несколько раз, пользователь не голосовал за один и тот же submission_id несколько раз и т. д. Я также считаю, что это поля устанавливаются с использованием внешних ключей, которые ссылаются на approved_submissions и users, чтобы предотвратить наличие недопустимых данных в соответствующих полях.

Используя модуль БД, я могу без проблем получить доступ к этим таблицам и обновить их. Я действительно чувствую, что ORM может предложить более мощный и доступный способ выполнения тех же задач с использованием меньшего количества кода.

Можете ли вы продемонстрировать, как я могу обновить информацию о голосовании пользователя на submission_id? Пользователь удаляет избранное submission_id? Пользователь меняет свой рейтинг на определенном submission_id?

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


person Dave Kiss    schedule 28.03.2011    source источник


Ответы (1)


Вероятно, вы ищете отношения has_many_through.

Итак, чтобы добавить новую отправку, вы должны сделать что-то вроде

 $user->add('submissions', $submission);

и удалить

 $user->remove('submissions', $submission);

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

person Zahymaka    schedule 29.03.2011