Yii使用关系条件生成查询(ActiveRecord)

时间:2013-09-10 10:48:09

标签: yii

我尝试生成此查询。

select * from jobs j inner join vacancies v on j.id = v.job_id where v.id = 2943 order by j.created_at desc limit 1

v.id只是为了测试查询是否正常工作。

我有一些条件来自空缺表需要使用作业表生成它。

我尝试的不只是生成它。

这是Vacancies模型的关系

'job' => array(self::BELONGS_TO, 'Jobs', 'job_id'),

这是乔布斯模型的关系

'vacancies' => array(self::HAS_MANY, 'Vacancies', 'job_id'),

和我的查询。

$newJobs = Jobs::model()->findAll(

                    array('with'=>array(
                            'vacancies'=>array(
                                'condition'=>'vacancies.id = 2943',
                                'order'=>'t.created_at desc',
                            )
                        ),
                    'order'=>'t.created_at desc'
                    ,'limit'=>1
                    )
                );

但这给了我最新的工作,没有空缺的任何条件作为id。

并尝试使用Jobs模型中的一些范围。

$newJobs = Jobs::model()->isOffline()->isApproved()->recent()->findAll(array(
                            'with'=>array(
                                'vacancies'=>array(
                                    'condition'=>'vacancies.id=2268'
                                )
                            )
                        )
                        );

范围

    public function recent($limit=1)
    {
        $this->getDbCriteria()->mergeWith(array(
            'order'=>'t.created_at DESC',
            'limit'=>$limit,
        ));
        return $this;
    }

    public function isOffline($offline = 'False')
    {
        $this->getDbCriteria()->mergeWith(array(
            'condition'=>"t.offline = '$offline' OR t.offline is null",
        ));
        return $this;
    }

    public function isApproved($approved = 'False')
    {
        $this->getDbCriteria()->mergeWith(array(
            'condition'=>"t.approved= '$approved'",
        ));
        return $this;
    }

在没有空缺条件的情况下,没有工作仍然可以给我最新的工作。

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:1)

试试这个:

                    ...
                    array('with'=>array(
                        'vacancies'=>array(
                            'alias'=>'v',
                            'joinType'=>'INNER JOIN',
                            'condition'=>'v.id = 2943',
                            'order'=>'t.created_at desc',
                        )
                    ),
                    ...

http://www.yiiframework.com/doc/guide/1.1/en/database.arr#performing-relational-query-without-getting-related-models