在Active Record中使用带有多个where子句的find()

时间:2015-03-30 22:38:27

标签: php mysql yii yii2 yii2-advanced-app

我想在3组中的Active Record查询之后划分(使用括号)。第一组将来自第一组"其中"条款持续"或者"。第二和第三将使用"以及"。

请告诉我如何使用括号分隔所有3个部分的建议。

$query = Book::find()
->where('book_name LIKE :book_name', array(':book_name' => 
'%'.$book_name.'%'))
->orWhere('book_category LIKE :book_category', array(':book_category' =>'%'.$category.'%'))
->orWhere('finance_subcategory LIKE :finance', array(':finance' => '%'.$category.'%'))
->orWhere('insurance_subcategory LIKE :insurance', array(':insurance' => '%'.$category.'%'))
->andWhere('address LIKE :address', array(':address' => '%'.$address.'%'))
->andWhere('status =:status', array(':status' => 'Enabled'))
->orderBy('book_id');

1 个答案:

答案 0 :(得分:13)

可以这样做:

$query = Book::find()
    ->where([
        'or',
        ['like', 'book_name', $book_name],
        ['like', 'book_category', $category],
        ['like', 'finance_subcategory', $category],
        ['like', 'insurance_subcategory', $category],
    ])
    ->andWhere(['like', 'address', $address])
    ->andWhere(['status' => 'Enabled'])
    ->orderBy('book_id');

我也为你重构了它,所以它现在看起来更具可读性。不要使用这样的连接,这不是好习惯。

请参阅official docs