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を返すことができました。問題は、関連するSkillAssessmentModelsを返すように取得できなかったことです。次のように、最初のクエリでも返されません。
$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');