在Yii中编写查询

时间:2014-04-22 05:50:08

标签: php sql yii

我有以下查询...并希望在现有查询中添加一些联合附加联合语句...发布平面sql查询,以便它让你知道我实际上在寻找什么。

/* simple sql query */
SELECT * 
FROM job_profile
INNER JOIN user ON user.id = job_profile.user_id
INNER JOIN category ON category.id = job_profile.category_id
WHERE category_id =1
AND experience =2
AND key_skills LIKE  '%php%'
LIMIT 0 , 30 
/* simple sql query */

我已经尝试了yii中的以下内容。它的工作到现在为止......但我不知道如何添加联合声明。

  $results = SearchEmployee::model()->findAll("category_id=:category AND key_skills like :skill AND experience=:experience", array(
        'category'=>$category,
        'skill'=>'%'.$skills.'%',
        'experience'=>$experience
        ));

我只想保留上述声明,只需要在声明中添加上面提到的联合查询。我不想使用adbCriteria进行时间设计。

2 个答案:

答案 0 :(得分:1)

好问题。您可以通过以下方式使用With()

Parent::model()->with(array(
  'childs',
  'childs.grandchilds' => array(
    'select' => false,
    'condition' => 'grandchilds.gender = "MALE"',
  ),
)->findAll(...); 

更多例如:

$users=User::model()->with(array(
    'posts'=>array(
        // we don't want to select posts
        'select'=>false,
        // but want to get only users with published posts
        'joinType'=>'INNER JOIN',
        'condition'=>'posts.published=1',
    ),
))->findAll();

答案 1 :(得分:1)

我认为您可以使用relations

执行此操作

job_profile表(我不知道您使用哪个模型)需要与usercategory

有2个关系

然后它将自动为您进行连接,您只需要搜索模型本身。

否则,如果你想做一个复杂的Select语句,虽然这不是很多MVC,你可以使用query builder

或以这种方式尝试:

$result = Yii::app()->db->createCommand('YOUR SELECT STATEMENT')->queryAll();