所以,我有三张桌子
表:用户
_________________ | id | user | ------------------- | 1 | Roy | | 2 | Ben | |________|________|
表: Hability_lists //我在哪里设置了所有可用的列表
___________________________________ | id | category | subcategory | ------------------------------------ | 1 | Programmer | PHP | | 2 | Programmer | ASP | |________|____________|_____________|
表: Habilities //我在哪里设置所有用户的habilities
________________________________________ | id | user_id | hability_list_id | ----------------------------------------- | 1 | 2 | 1 | | 2 | 1 | 2 | |________|____________|__________________|
通过这个,我们可以看到:
Roy 是 ASP程序员, Ben 是 PHP程序员
但是,如何使用CakePHP设置这样的相对模型? 我知道如何使用两个模型但不使用三个模型。
有一些方法可以做到这一点?或者更好的方法呢?
提前致谢。
答案 0 :(得分:3)
使用MVC框架时,强烈建议您关注its conventions。所以一些改变可能对你有利。
您正在寻找“用户”表和“habilities”表*之间的HABTM(拥有和属于多人)关联。我猜测,通过你的表的设计,用户可以拥有多个habilities,否则你应该检查hasMany关联。
它应该是这样的:
表格能力: 选择*来自habilities;
+----+------------+----------------------+----------+
| id | category | subcategoy | created | modified |
+----+------------+------------+---------+----------+
| 1 | Programmer | ASP | | |
| 2 | Programmer | PHP | | |
| 3 | Musician | Classical | | |
+----+------------+------------+---------+----------+
表用户: 从用户中选择*;
+----+-------+---------------------+---------------------+
| id | name | created | modified | **
+----+-------+---------------------+---------------------+
| 1 | Roy | 2012-08-15 02:52:18 | 2013-01-17 03:25:28 |
| 2 | Ben | 2012-11-10 03:36:12 | 2012-11-10 03:36:12 |
+----+-------+---------------------+---------------------+
HABTM的关系表: select * from habilities_users;
+----+-------------+-------------------+----------+
| id | hability_id | user_id | created | modified |
+----+-------------+---------+---------+----------+
| 1 | 1 | 2 | | |
| 2 | 2 | 1 | | |
+----+-------------+---------+---------+----------+
查看habilities_users中的参考列,它们是单数的,带有_id后缀以与CakePHP一起使用。
定义模型类也很重要,因为它是您定义所有关联的地方。
应用程序/型号/ user.php的
<?php
class User extends AppModel {
public $hasAndBelongsToMany = array('Hability');
}
应用程序/型号/ Hability.php
<?php
class Hability extends AppModel {
public $hasAndBelongsToMany = array('User');
}
表habilities_users不需要模型文件,其行为和属性隐含在其关联模型的声明中。
*使用这些名称,它也是CakePHP的方式。 [link]
**在每个表中添加“created”和“modified”将自动为每条记录存储这些事件。
答案 1 :(得分:1)
您需要使用HasAndBelongsToMany (HABTM)。
这允许您有两个模型 - User
和Hability
由“tweener”表连接。