我试图弄清楚如何使用 Yii 的 CDbCriteria 构建查询,该查询等效于以下内容:
SELECT
*
FROM
user u
JOIN (
SELECT *
FROM skill_assessment s
WHERE s.skill = 'HTML'
AND s.score >= 80
) b ON
(u.id = b.userId)
JOIN (
SELECT *
FROM skill_assessment s
WHERE s.skill = 'CSS3'
AND s.score >= 80
) c ON
(u.id = c.userId);
etc...
这是我到目前为止所拥有的,这是行不通的:
$criteria = new CDbCriteria();
$criteria->alias = "u";
$criteria->select = "*";
$criteria->join = "JOIN skill_assessment s ON (u.id=s.userId)";
for($i = 0; $i < count($skill_filters); $i++) {
$criteria->addCondition("s.skill='".$skill_filters[$i]->skill."' AND s.score >= ".$skill_filters[$i]->level);
}
$users = UserModel::model()->findAll($criteria);
任何帮助将不胜感激。提前致谢。
编辑:我能够将 sql 查询构建为字符串并使用 findAllBySql,它返回了与我的搜索条件匹配的正确 UserModel,问题是我无法让它返回相关的 SkillAssessmentModel。他们也不会返回初始查询,如下所示:
$users = UserModel::model()->with('skill_assessments')->findAllBySql($sql);
如果我得到这样的结果:
$users = UserModel::model->findAllBySql($sql);
foreach($users as $user)
{
$user->skill_assessments = $user->getRelated('skill_assessments');
}
关于如何获得这些相关模型的任何想法?奇怪的是,在我的应用程序的其他地方,如果我这样做,我可以获得相关模型:
$user = UserModel::model->findByPk($id);
$user->skill_assessments->getRelated('skill_assessments');