Использование функции find () в Active Record с несколькими условиями where

Я хочу разделить (используя скобки) после запроса Active Record в 3 группах. Первая группа будет от первого предложения «Где» до последней или «Где». Второй и третий будут использовать «andWhere».

Пожалуйста, дайте мне советы о том, как использовать скобки для разделения всех трех разделов.

$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'); 

Related of "Использование функции find () в Active Record с несколькими условиями where"

Можно сделать так:

 $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'); 

Я также реорганизовал его для вас, поэтому теперь он выглядит более читаемым. Не используйте такую ​​конкатенацию, это не очень хорошая практика.

См. Официальные документы .