나는이 문제를 얻을 수있는 두 가지 방법을 발견했다. 첫 번째는 모델에서 직접 두 번째 수준 결합을 정의하는 것입니다. 이제 모든 곳에서이 데이터에 액세스 할 수 있습니다. 그것은이 방법
var $belongsTo = array(
'Foo' => array(
'className' => 'Foo', //unique name of 1st level join (Model Name)
'foreignKey' => 'foo_id', //key to use for join
'conditions' => '',
'fields' => '',
'order' => ''
),
'Bar' => array(
'className' => 'Bar', //name of 2nd level join (Model Name)
'foreignKey' => false,
'conditions' => array(
'Bar.id = Foo.bar_id' //id of 2nd lvl table = associated column in 1st level join
),
'fields' => '',
'order' => ''
)
);
문제는 그들이 할 필요가보다 일반적으로 쿼리가 더 복잡 만들 수 있다는 것입니다 ..... 다음과 비슷한 모습이 될 것입니다. 따라서 다음과 같이 두 번째 수준 쿼리를 직접 찾기 또는 페이지 매김 문에 추가 할 수도 있습니다. (참고 : 두 번째 수준의 조인에서 어떤 이유로 $ belongsTo 연결을 사용할 수 없으며이를 다시 정의해야합니다. 그들은 이미 정의되어 있습니다. 예를 '푸'는 이미 $ belongsTo를 정의하면, 당신은 아래의 예처럼 연결 작업을하기 위해 중복 'FOO1'를 작성해야합니다.)
$options['joins'] = array(
array('table' => 'foos',
'alias' => 'Foo1',
'type' => 'inner',
'conditions' => array(
'CurrentModel.foo_id = Foo1.id'
)
),
array('table' => 'bars',
'alias' => 'Bar',
'type' => 'inner',
'foreignKey' => false,
'conditions' => array(
'Bar.id = Foo1.bar_id'
)
)
);
$options['conditions'] = array('Bar.column' => "value");
$this->paginate = $options;
$[modelname] = $this->paginate();
$this->set(compact('[modelname]'));
나는이 분명하다 희망 이해하기에 충분하고 누군가를 돕는 것입니다.
디버그 출력을 살펴 보았습니다. 'JOIN'을 수행하지 않았습니다. 이것은 불행한 일입니다. 실제로 CakePHP가 그것을 할 수있는 다른 방법은 없을까요? – ash
http://teknoid.wordpress.com/2008/07/17/forcing-an-sql-join-in-cakephp/ hasMany를 바인딩 해제하고 왼쪽 결합을 강제로 수행하는 방법에 대한 해결책이 있습니다. 조인을 사용하는 임시 hasOne이 있습니다. 그것을 읽으면 알려주고 그렇지 않으면 내가 볼 수있는 임시 조인 코드를 게시 할 수 있습니다. –
실제로 작동했습니다. 도와 주셔서 감사합니다! – ash