2012-11-23 8 views
0

죄송합니다. 이것이 분명하다면 - 조인 테이블에서 find()를 시도하고 실패합니다. 올바른 구문은 무엇입니까?CakePHP가 조인 테이블에서 찾는다

기본적으로 나는 비용 표와 HABTM releationship이있는 expenseCode 테이블을 가지고 있습니다. 내 expenseCode 모델에서

나는이 :

public function beforeDelete($cascade = false) { 

    $count = $this->Expense->find("count", array(
     'conditions' => array('expense_code_id' => $this->id) 
    )); 

    if ($count == 0) { 
     return true; 
    } else { 
     //$this->Session->setFlash('Record cannot be deleted as it has ' . $count . 'number of expenses attached to it'); 
     return false; 
    } 

} 

나는() 나는 오류를 얻을 setFlash 주석을 제거합니다.

어디로 잘못 가고 있습니까? 미리 감사드립니다.

+0

그래서 this-> ID를 일치하는 expense_code_ids가 없을 것? 구문이 정확 해 보이고 찾기가 작동하지만 적어도 하나의 결과가 발견됩니다. – Quinny

답변

1

불행히도 추가 작업없이 상위 모델 중 하나의 HABTM 조인 테이블에서 이러한 쿼리를 수행 할 수 없습니다. 나는 비용이 상위 모델이고 ExpensesCode가 조인 모델이라고 가정합니다.

일반적인 방법은 HABTM 조인 테이블을 모델링하는 것입니다. 당신이 expenses_codes에 의해 결합되어 expensescodes 테이블이 있다고 가정 :

$this->Expense->bindModel(array('hasOne' => array('ExpensesCode'))); 
$this->Expense->find('all', array(
    'fields' => array('Expense.*'), 
    'conditions' => array('ExpensesCode.expense_code_id' => $this->id) 
)); 

하지만를, 케이크도 HABTM 협회가 정의 될 때 the manual 참조 (테이블 조인에 대한 모델을 자동-iniatlises하고 "와" 가능한 키 목록에서 키). 그것은 같은 조인 수행하지 않는

$this->Expense->ExpensesCode->find('all', array(
    'conditions' => array('ExpensesCode.expense_code_id' => $this->id) 
)); 

위의 쿼리, 조인 테이블에서 결과 만 포함하는 배열을 그물 것

그래서이 구문은 직접 조인 테이블을 쿼리 할 것 첫 번째 절차. ExpensesCode에서 expense_code_id과 관련된 비용을 찾으려면 비용 모델에서 두 번째 find()을 수행해야합니다.

편집 : HABTM 조인 테이블은 밑줄을 긋고 알파벳 순으로 정렬해야합니다. 따라서 HABTM 조인 테이블을 codes_expenses이라고하면 CodesExpense으로 자동 모델링됩니다.

+0

답변 해 주셔서 감사합니다. 지금 테스트 해 보겠습니다. –

+0

HABTM 테이블에 대한 규칙은 사전 순으로되어 있다는 것을 깨달았습니다. 그래서 당신의 조인 테이블이'codes_expenses'라고 불리우면 CakePHP에 의해 CodesExpense로 자동 모델화됩니다. – mensch

+0

안녕하세요, 내 테이블 이름은 - 비용, expense_codes 및 expenses_expense_codes (조인 테이블)입니다.이 수표가 Expense_code 모델로 들어가기를 원합니다 (비용을 사용하여 비용 코드를 삭제하려고하면 오류가 발생합니다). 그래서 내 쿼리를 찾을 것 같아요 - $ this-> ExpenseCode-> 비용 -> 찾기 ... ?? 감사합니다 다시 –

0

HABTM이 아닌 두 개의 hasMany 관계가있는 다른 모델을 만드는 경우보다 간단한 방법으로 작업 할 수도 있습니다.

두 모델 간의 HasAndBelongsToMany는 실제로 hasMany와 belongsTo 연관을 통해 연결된 세 모델의 축약 형입니다.

데이터를 저장하고 검색하는 가장 간단한 방법 중 하나라는 것을 알았습니다. 자세한 내용은

: http://book.cakephp.org/2.0/en/models/saving-your-data.html#what-to-do-when-habtm-becomes-complicated

관련 문제