管理CakePHP中关联的多个表

时间:2013-05-04 20:20:54

标签: php cakephp model

所以,我有三张桌子

表:用户

 _________________
|  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设置这样的相对模型? 我知道如何使用两个模型但不使用三个模型。

有一些方法可以做到这一点?或者更好的方法呢?

提前致谢。

2 个答案:

答案 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)

这允许您有两个模型 - UserHability由“tweener”表连接。