我有一个应用程序,其中几个模型由 hasMany/belongsTo 关联链接。例如,A 有很多 B,B 有很多 C,C 有很多 D,D 有很多 E。另外,E 属于 D,D 属于 C,C 属于 B,B 属于 A。使用 Containable 行为已经非常适合控制每个查询返回的信息量,但是在使用涉及表 D 的条件时尝试从表 A 获取数据时我似乎遇到了问题。例如,这是我的“A”的示例模型:
class A extends AppModel {
var $name = 'A';
var $hasMany = array(
'B' => array('dependent' => true)
);
function findDependentOnE($condition) {
return $this->find('all', array(
'contain' => array(
'B' => array(
'C' => array(
'D' => array(
'E' => array(
'conditions' => array(
'E.myfield' => $some_value
)
)
)
)
)
)
));
}
}
这仍然给了我'A'中的所有记录,如果它的相关'E'记录不满足条件,那么我就得到这个:
Array(
[0] => array(
[A] => array(
[field1] => // stuff
[field2] => // more stuff
// ...etc
),
[B] => array(
[field1] => // stuff
[field2] => // more stuff
// ...etc
),
[C] => array(
[field1] => // stuff
[field2] => // more stuff
// ...etc
),
[D] => array(
[field1] => // stuff
[field2] => // more stuff
// ...etc
),
[E] => array(
// empty if 'E.myfield' != $some_value'
)
),
[1] => array( // ...etc )
)
当 If 'E.myfield' != $some_value 时,我根本不希望返回记录。
我希望这足以清楚地表达我的问题......
基本上,我想要以下查询,但是以一种与数据库无关/CakePHP-y 的方式:
SELECT *
FROM A INNER JOIN
(B INNER JOIN
(C INNER JOIN
(D INNER JOIN
E ON D.id=E.d_id)
ON C.id=D.c_id)
ON B.id=C.b_id)
ON A.id=B.a_id
WHERE E.myfield = $some_value