Как сохранить информацию о флажках в БД на Zend Framework? - PullRequest
0 голосов
/ 22 мая 2011

У меня следующая проблема: я создаю форму для регистрации пользователей в приложении, и в разных типах ввода есть пара флажков, касающихся языка, на котором говорит пользователь.Теперь, когда пользователь может говорить более чем на одном языке, мне было интересно, как это обрабатывается в БД?Должны ли я иметь lang1, lang2, lang3 ... и т. Д. В качестве строк в таблице 'users'?

Ответы [ 2 ]

2 голосов
/ 22 мая 2011

Должен ли я иметь lang1, lang2, lang3 ... и т. д. как строки в 'users' таблица

Это не очень хорошая идея. Структура таблицы должна быть примерно такой:

user
-------------
| id | .... |

language
-------------
| id | name |

user_language
-------------------------
| user_id | language_id |

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

SELECT language.name as language
FROM user
INNER JOIN user_language ON user_language.user_id = user.id
INNER JOIN language ON language.id = user_language.language_id
WHERE user.id = $id

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

EDIT

Возьмем, к примеру, английский и испанский языки (id 1 и id 2), а ID пользователя равен 1. Чтобы связать пользователя с языками:

INSERT INTO user_language (user_id, language_id)
VALUES(1,1); <-- Associate user with English (id 1)
INSERT INTO user_language (user_id, language_id)
VALUES(1,2); <-- Associate user with Spanish (id 2)

Теперь предполагается, что вы заполняете ваши доступные языки значениями в таблице language, со значением поля language.id и отображением поля language.name.

0 голосов
/ 22 мая 2011

Я сам новичок в Zend (я учусь на 4-ом курсе BSC), но это то, что я хотел бы сделать.

Я бы создал связанную таблицу, такую ​​как speaksLanguages, имеющую несколько строк втаблица пользователей, большинство из которых будут нулевыми, на мой взгляд, никогда не была бы хорошей идеей, при сохранении пользователя перенаправьте ваше приложение на контроллер speaksLanguages ​​createAction () и сохраните там языки пользователей.

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

Опять я новичок в этом, но я сделал нечто подобное, используя эту логику.

...