我正在使用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();
上面的代码返回此错误:
我认为这是因为它不是正确的语法/结构。 无论如何,这是我的原始代码:
$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
。这就是为什么我尝试重构查询但它不起作用的原因。
你知道怎么做吗?
答案 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