2013-05-04 131 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]

**在每個表格中添加「創建」和「修改」將自動存儲每條記錄的這些事件。