2013-04-19 10 views
0

서로 연관시키고 자하는 도시에 대한 사용자 테이블과 테이블이 있습니다. 추측 하듯이 한 도시에는 여러 명의 사용자가있을 수 있지만 한 명의 사용자는 한 도시에만 연결할 수 있습니다.CakePHP와 사용자를 하나의 도시로 연결하기

나는 테이블을 어떻게 세우는 지 정말로 모른다. 도시에 대해 $ hasMany 관계를 시도하고 사용자에 대해 $ hasOne을 시도하면 client_id 필드가 내 도시 테이블에서 발견되지 않으므로 오류가 발생합니다. 내 도시 테이블은 고쳐질 것입니다. 아무도 테이블을 바꿀 수 없습니다. 이 표에 도시에 대한 정보를 저장하고 싶습니다. 편집

: 여기 내 테이블과 내 모델 (단순 유지)입니다

clients { id, firstname, lastname, city_id } 
cities { id, name, some_other_data } 

그리고 여기 내 모델입니다 : 당신은 관계를 반전 할 필요가

// User 
class Client extends AppModel { 
    public $hasOne = array(
     'City' 
    ); 
} 

// City 
class City extends AppModel { 
    public $useTable = 'cities'; 

    public $hasMany = array(
     'Client' 
    ); 
} 
+0

외래 키 지정해야 할 일을하고 테이블의 컬럼/이름하지 않습니다 할 수있다? – Nunser

+0

당신은'User'와'City' 테이블을 가지고 있지만'users'와'cities'가 있어야합니다 ... 아니면'clients'와'cities'라고 제가 모델에서 보았던 것에 따라 – Nunser

+0

그게 아닙니다. 문제. 나는 CakePHP의 명명 규칙을 따랐다. 내 사용자 모델이 데이터에 액세스 할 수 있습니다. 하지만 난 '$ hasOne city'일을 얻을 수 없기 때문에이 오류가 발생합니다. SQLSTATE [42S22] : 열을 찾을 수 없습니다 : 1054 알 수없는 열 'City.client_id'in on clause ' –

답변

2

; 클라이언트가 'belongsTo'도시입니다. (나도 알아,이 소리 비논리적);

// User 
class Client extends AppModel { 
    public $belongsTo = array(
     'City' 
    ); 
} 

// City 
class City extends AppModel { 
    public $useTable = 'cities'; 

    public $hasMany = array(
     'Client' 
    ); 
} 

고객 테이블이 제대로이 일을 할 수있는 city_id 필드를 포함해야한다 (당신의 테이블 정의를 쳐다 보면서 그렇게 그냥 당신을 위해 작동해야 클라이언트 모델을 변경, 이미있다).

1

는 우리가 당신이 모델 (사용자 및 도시 당신이있는 경우)와 질문을 업데이트 할 수

// User 
class Client extends AppModel { 
    public $belongsTo = array(
     'City'=> array(
     'className' => 'City', 
     'foreignKey' => 'city_id' 
    ) , 
    ); 
} 
// City 
class City extends AppModel { 
    public $useTable = 'cities'; 

public $hasMany = array(
    'Client' => array(
     'className' => 'Client', 
     'foreignKey' => 'city_id' 
    ) , 
); 
} 
+0

문제는 OP가 CakePHP 규칙을 적절히 사용했기 때문에 ClassName과 foreignKey를 추가하는 것이 * nescessary가 아닌 것입니다. – thaJeztah