2014-01-31 2 views
0

I 두 테이블CakePHP의 AND 조건

필드

officetypes이 ID [PK, 이름, officetype_id [FK]

두 모델 Officename.php

class Officename extends AppModel { 

    public $name = 'Officename'; 
    public $belongsTo = array(
     'Officetype' => array(
      'className'  => 'Officetype', 
      'foreignkey'=>'id' 
     ) 
    ); 

Officetype.php

,378,

지금 내가 어떻게 컨트롤러의 조건이 논문이 tables.My 조건 가입을 쓸 수는 다음과 같이이다 : 당신이 할 경우

$this->Officetype->find('all'); 
+0

officenames의 테이블에 officeid 필드가 없습니다. 또한 cakephp 이름 지정 규칙을 올바르게 따르지 않습니다. yoir 테이블은 office_types 및 office_names이고 모델은 OfficeName OfficeType이어야합니다. – arilia

+1

컨트롤러에 SQL 코드를 작성하는 이유는 무엇입니까? SQL을 작성한다면 모델에 넣지 않는 이유는 무엇입니까 (_fat 모델, 스키니 컨트롤러 _)? 그러나 ** find ** 기능을 사용하지 않는 이유는 무엇입니까? ** hasmany **와 ** belongssto ** 관계를 정의함으로써, 여러분은 이미 cakephp가 사용해야하는 관계를 설정했다. – AgRizzo

답변

0

당신은 그냥 할 필요

$this->OfficeType->find('all') 

원하는 데이터를 검색합니다.

어쨌든 내 경험상 Containable 비헤비어를 사용하는 것이 좋습니다. 특히 모델을 확장해야하는 경우 특히 그렇습니다. Containable을 사용하면 원하는 모델 만 검색 할 수 있습니다. 그래서 이렇게 : 다음

class OfficeType extends AppModel { 

public $actsAs = array('Containable'); 
public $hasMany = array(
    'OfficeName 
); 

와, 컨트롤러의 사용 :

$this->OfficeType->find('all', array(
    'contain' => 'OfficeName', 
    'conditions' => array('id' => 3) 
    ) 
0

을 :

SELECT a. * , b. * FROM officetypes AS a, officenames AS b  
    WHERE 
     a.id =3  
    AND 
     b.officeid = a.under