【问题标题】:How to write the query in yii,using findAll()如何在 yii 中编写查询,使用 findAll()
【发布时间】:2014-04-21 12:41:14
【问题描述】:

我有下面的sql查询,如何在yii中使用findAll()写查询?

我没有使用CDbCriteria,暂时避免使用它。

使用三个表 user、category 和 job_profile。

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%'

我已经编写了以下查询,但我不知道如何包含联接:

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

【问题讨论】:

    标签: php sql yii


    【解决方案1】:
    $model = JobProfile::model()->with('userrelationname','categoryrelationname')->findAll(array("condition"=>"t.category_id =1 and t.experience =2 and t.key_skills LIKE '%php%'"));
    

    您可以在 JobProfile 模型中找到关系名称

    关系示例

    您的 JobProfile 模型文件中会有源代码,例如

     public function relations(){
        return array(
          'user' => array (self::BELONGS_TO, 'User', 'id' ),
        )
     }
    

    这里的“用户”是关系名称...

    然后在您的控制器示例中;

    foreach($model as $m){
        echo $m['user_id']; // in your job_profile table
        echo $m->user->id;  // in your user table
    }
    

    【讨论】:

    【解决方案2】:

    您可以将 queryAll 与 create 命令一起使用。

        $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%'";
    
                    $result= Yii::app()->db->createCommand($query)->queryAll();
    

    【讨论】:

    • queryAll 返回和 Array 。你必须使用 foreach .stackoverflow.com/questions/18717533/…
    • @shanavascet...我的查询有问题并已更改它。但现在它在我的视图中显示错误“尝试获取非对象的属性”。
    • shanavascet...已经解决...我的数据显示方式有误,已更正。谢谢
    【解决方案3】:

    你可以试试这个方法吗:

    $c = array('join' => 
        array(
            'user' => array(
                'joinType' => 'INNER JOIN',
                'on' => 'user.id = t.user_id'
            ),
            'category' => array(
                'joinType' => 'INNER JOIN',
                'on' => 'category.id = t.category_id'
            ),
        ),
        'condition' => "t.category_id =1 and t.experience =2 and t.key_skills LIKE '%php%'"
    );
    $results = SearchEmployee::model()->findAll($c);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      相关资源
      最近更新 更多