我目前正在开发一个学生信息系统,教育组将使用该系统为学生和学生提供信息。老师是门户网站。
我使用的Laravel4内置了一个很好的身份验证驱动程序,但只能使用一个表进行身份验证。我无法弄清楚如何验证它们,因为我有多个表中的用户。示例:
答案 0 :(得分:1)
一种明显更好的方式,而不是多个用户表,将每个用户链接到他们的学校和状态(教师或学生)。你当然可以扭曲Laravel做你想做的事情,但为了防止四种不同用户类型之间的冲突,你可能最终不得不重写整个身份验证包的大部分。
我要做的是,在您的用户表中,有一个ENUM
列,其中包含选项student
和teacher
。然后,有一个整数列school_id
(如果需要,还有一个单独的学校数据表)。这将提供更大的灵活性,当您的设计要求发生变化时(是的,他们将更改),您将能够大步迈进。
使用此方法,您不必修改任何Laravel自己的代码。
答案 1 :(得分:0)
如果所有表都具有相同的模式,您可以创建一个视图来执行所有表的UNION
,然后将该视图用作Laravel身份验证表。我并不是说这是一个理想的解决方案,但是如果您对更改现有表有限制并且必须按原样使用它们,这可能会有效。
视图无法更新(至少我不这么认为),因此添加或更新用户需要特定的添加/更新代码,但对于Auth,这可能会有所帮助。
CREATE VIEW users_combined_view
AS
SELECT id, username, password
FROM schoolOne_students
UNION
SELECT id, username, password
FROM schoolOne_teachers
UNION
...
注意 - 如果username
在表格中不唯一,这种方法会有点无用(好吧,完全没用)
答案 2 :(得分:0)
良好的数据库设计是可扩展的。 这尤其是一个坏主意:
SchoolOne_students
SchoolOne_teachers
SchoolTwo_students
SchoolTwo_teachers and so on...
对于所有用户,应该只有一个表,对于students
。
Schools
应该有另一个表格,其中将存储所有学校信息。
然后,您应该将students
表加入schools
表,方法是在school_id
表中添加schools
字段,其中school_id
将存储在 ===Students Table===
表中相应的学生排。
+-----------------------------------------
+ id | name |school_id | ... | ... |
+----+--------+----------+-----------+----
+ 1 |Student1| 5 | ... | ... |
+----+--------+----------+-----------+----
+ 2 |Student1| 3 | ... | ... |
===Schools Table===
+-----------------------------------------
+ id | name | ... | ... | ... |
+----+--------+----------+-----------+----
+ 3 |School 3| ... | ... | ... |
+----+--------+----------+-----------+----
+ 5 |School 5| ... | ... | ... |
+----+--------+----------+-----------+----
{{1}}
通过这种方式,您可以添加任意数量的学校和学生
我希望这会有所帮助