2013-05-04 5 views
0
에 relationed 여러 테이블을 관리

테이블 : 사용자는 <p>그래서, 내가 세 개의 테이블</p>이 CakePHP의

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

테이블 : Hability_lists // 내가

가능한 모든 habilities와의 목록을 설정 어디
 
___________________________________ 
| id | category | subcategory | 
------------------------------------ 
| 1 | Programmer |  PHP  | 
| 2 | Programmer |  ASP  | 
|________|____________|_____________| 

표 : Habilities // 어디입니까? 등 모든 사용자 이로써

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

에서 habilities은, 우리가 그것을 볼 수 있습니다

로이ASP 프로그래머되는 PHP 프로그래머

하지만, CakePHP를 사용하여 이와 같은 상대 모델을 설정하는 방법은 무엇입니까? 두 모델을 사용하지만 세 모델을 사용하지 않는 방법을 알고 있습니다.

어떻게해야합니까? 아니면 더 좋은 방법일까요?

미리 감사드립니다.

+0

안녕하세요 @Alexandre, 모델 코드를 게시하여 현재 연결을 볼 수 있습니까? –

답변

3

MVC 프레임 워크로 작업 할 때는 its conventions을 따르는 것이 좋습니다. 따라서 몇 가지 변경 사항이 도움이 될 수 있습니다.

"사용자"테이블과 "habilities"테이블 * 사이에 HABTM (Has 및 Belongs To Many) 연결을 찾고 있습니까? 테이블의 디자인에 따라 사용자가 여러 가지 habilities를 가질 수 있다고 생각합니다. 그렇지 않으면 hasMany 연결을 확인해야합니다.

그것은이 같은해야한다 :

표 habilities : 선택 * habilities에서;

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

테이블 사용자 : select * from users; HABTM에 대한

+----+-------+---------------------+---------------------+ 
| 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 | 
+----+-------+---------------------+---------------------+ 

관계형 테이블 : habilities_users에서 * 가 선택;

+----+-------------+-------------------+----------+ 
| id | hability_id | user_id | created | modified | 
+----+-------------+---------+---------+----------+ 
| 1 | 1   | 2  |   |   | 
| 2 | 2   | 1  |   |   | 
+----+-------------+---------+---------+----------+ 

는 habilities_users에서 참조 열, 그들은 CakePHP에서 작업 할 _id 접미사 단수있어 봐.

모델 클래스를 정의하면 모든 연관을 정의하기 때문에 모델 클래스도 중요합니다.

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]

** 각 테이블에 "created"및 "modified"를 추가하면 각 레코드에 대한 해당 이벤트가 자동으로 저장됩니다.

1

HasAndBelongsToMany (HABTM)을 사용하고 싶습니다.

이렇게하면 두 개의 모델 (UserHability)이 "tweener"테이블로 결합됩니다.