我試圖找出如何建立使用Yii的CDbCriteria的查詢將等同於以下的匹配多發行: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,它返回了符合我的搜索條件的正確的UserModels,問題是我一直無法讓它返回相關的技能評估模型。他們不與初始查詢回來要麼,像這樣:
$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');
你可以閱讀文檔。 – adamors