2013-05-04 57 views
0
relationed多个表

所以,我有三个表管理CakePHP中

表:用户

 
_________________ 
| id | user | 
------------------- 
| 1 | Roy | 
| 2 | Ben | 
|________|________| 

表:Hability_lists //我在哪里设置与现有

所有habilities列表
 
___________________________________ 
| id | category | subcategory | 
------------------------------------ 
| 1 | Programmer |  PHP  | 
| 2 | Programmer |  ASP  | 
|________|____________|_____________| 

表:能力 //何处等所有用户

 
________________________________________ 
| id | user_id | hability_list_id | 
----------------------------------------- 
| 1 |  2  |   1  | 
| 2 |  1  |   2  | 
|________|____________|__________________| 

通过这个habilities,我们可以看到:

罗伊ASP程序员PHP程序员

但是,如何使用CakePHP设置这样的相关模型? 我知道如何使用两个模型,但不使用三个模型。

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

在此先感谢。

+0

嗨@Alexandre,请你可以发布你的模型代码,以便我们可以看到你当前的关联? – 2013-05-04 20:43:43

回答

3

在使用MVC框架时,强烈建议遵循its conventions。所以一些改变可能对你有益。

您正在寻找其“用户”表和“性能”表之间的HABTM(具有和属于许多)关联。我猜测,通过你的表的设计,用户可以有多个habilities,否则你应该检查hasMany关联。

应该是这样的:

表habilities: SELECT * FROM habilities;

+----+------------+----------------------+----------+ 
| id | category | subcategoy | created | modified | 
+----+------------+------------+---------+----------+ 
| 1 | Programmer | ASP  |   |   | 
| 2 | Programmer | PHP  |   |   | 
| 3 | Musician | Classical |   |   | 
+----+------------+------------+---------+----------+ 

表用户: select * from users;

+----+-------+---------------------+---------------------+ 
| 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一起使用。

定义模型类也很重要,因为它是您定义所有关联的地方。

app/Model/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]

**在每个表格中添加“创建”和“修改”将自动存储每条记录的这些事件。