where子句where where子句?

时间:2015-10-16 06:36:07

标签: php mongodb yii yii2 where

我正在使用Yii 2.0 PHP框架。是否可以将where子句放在where子句中?就我而言,我想将orwhere条款放在andwhere

$employees = Employee::find()
    ->where([ 'parent' => new \MongoId($session['company_owner']) ])
    ->andwhere([ Employee::find()
        ->orwhere([ 'employee_id' => new \MongoRegex("/".$keyword."/i") ])
        ->orwhere([ 'department_name' => new \MongoId($departments['_id']) ])
        ->orwhere([ 'division_name' => new \MongoId($divisions['_id']) ])
        ->orwhere([ 'job_title' => new \MongoId($jobpositions['_id']) ])
    ])->all(); 

上面的代码返回此错误:

enter image description here

我认为这是因为它不是正确的语法/结构。 无论如何,这是我的原始代码:

$employees = Employee::find()
    ->orwhere([ 'employee_id' => new \MongoRegex("/".$keyword."/i") ])
    ->orwhere([ 'department_name' => new \MongoId($departments['_id']) ])
    ->orwhere([ 'division_name' => new \MongoId($divisions['_id']) ])
    ->orwhere([ 'job_title' => new \MongoId($jobpositions['_id']) ])
    ->andwhere([ 'parent' => new \MongoId($session['company_owner']) ])
    ->all();

它工作正常,但我想重组它,因为它需要时间。在访问orwhere之前,它仍然需要经历一系列andwhere。这就是为什么我尝试重构查询但它不起作用的原因。

你知道怎么做吗?

1 个答案:

答案 0 :(得分:2)

你应该试试这个:

$employees = Employee::find()
    ->where([ 'parent' => new \MongoId($session['company_owner']) ])
    ->andwhere([
        'or',
        [ 'employee_id' => new \MongoRegex("/".$keyword."/i") ],
        [ 'department_name' => new \MongoId($departments['_id']) ],
        [ 'division_name' => new \MongoId($divisions['_id']) ],          
        [ 'job_title' => new \MongoId($jobpositions['_id']) ],
    ])->all(); 

了解详情:http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#where()-detail