如何在Zend Framework上的db中保存复选框信息?

时间:2011-05-21 22:07:56

标签: zend-framework zend-db

我有以下问题:我正在创建一个表单来在应用程序上注册用户,在不同的输入类型中,有几个关于用户说话语言的复选框。现在,由于用户可能只会说一种语言,我想知道如何在数据库中处理?我应该将lang1,lang2,lang3 ......等作为'users'表中的行吗?

2 个答案:

答案 0 :(得分:2)

  

我应该有lang1,lang2,   lang3 ...等''用户'中的行   表

这不是个好主意。表结构应该是这样的:

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

这意味着您可以更新语言名称,名称更新将透明地进行,而无需担心在用户表的所有实例中进行编辑。此方法还允许您为用户分配任意数量的语言。

修改

例如,如果语言是英语和西班牙语(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,字段显示为{{1 }}

答案 1 :(得分:0)

我自己是Zend的新手(我是四年级的BSC学生),但这就是我要做的。

我会创建一个相关的表,例如speaksLanguages在users表中有多行,大多数将为null在我看来永远不是一个好主意,在保存用户时将应用程序重定向到speaksLanguages控制器createAction()并保存那里的用户语言。

您需要创建一个会话以在重定向中保留新用户。

我再次对此不熟悉,但我使用这种逻辑做了类似的事情。