我有3个表(实际上有4个是因为多关系的连接表)。使用'with'子句的复杂CDbCriteria
可以说,他们是:grandparent(g)
,parent(p)
,child(c)
,与gp_join(gp)
为祖父母,父母多对多的关系连接表。用下面的关系:
祖父母关系:
'parent' => array(self::MANY_MANY, 'Parent', 'gp_join(g_id, p_id)')
父母的关系:
'grandparent' => array(self::MANY_MANY, 'Grandparent', 'gp_join(p_id, g_id)'),
'child' => array(self::HAS_MANY, 'Child', 'p_id')
子女的关系:
'parent' => array(self::BELONGS_TO, 'Parent', 'p_id')
我想找到一个祖父的所有孙子。我有一个SQL查询成功,但我需要知道如何使用Yii框架(最好使用'with'属性,因为它很酷)。
工作的SQL语句:
SELECT c.name
FROM grandparent `g`
JOIN gp_join `gp` ON gp.g_id=g.g_id
JOIN parent `p` ON p.p_id=gp.p_id
JOIN child `c` ON c.p_id = p.p_id
WHERE g.g_id=12;
这是我一直在努力(它返回每一个孩子,无论他们是否有正确的祖父):
$criteria = new CDbCriteria();
$criteria->with['parent'] = array (
'with' => array(
'grandparent' => array(
'alias' => 'g',
'condition' => 'g.g_id='.$this->g_id
)
),
'alias' => 'p',
'condition' => 'p.p_id=t.list_id'
);
return Child::model()->findAll($criteria);
一切正常,在我的设置用U提供的数据。从yii调试器发布查询,也许它会让我们更深入地了解发生了什么。 – xReprisal
如何检索构造的查询?你是否使用了我的评论中的'with'数组或者你的评论中的数组?我一直在努力都没有成功。 – Gizmoh
是的,我在你的文章中使用了标准。使用CLogRouter记录日志中的查询.docs用于记录yii:http://www.yiiframework.com/doc/guide/1.1/en/topics.logging – xReprisal