我找到了两种方法来解决这个问题。第一种是直接在模型中定义二级关联。现在,您将可以在任何地方访问这些数据。它应该看起来像这样......
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' => ''
)
);
这种方法的问题是它可能使一般查询比它们需要的更复杂。因此,您还可以将二级查询直接添加到 te find 或 paginate 语句中,如下所示:(注意:我发现由于某种原因,您不能在二级连接中使用 $belongsTo 关联,如果它们需要重新定义它们已定义。例如,如果 $belongsTo 中已经定义了“Foo”,则需要创建一个重复的“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]'));
我希望这足够清楚,可以理解并且它可以帮助某人。