mstdmstdd Posted April 18, 2017 Share Posted April 18, 2017 Hello,in laravel 5.4 I have a form with several criteria and several of them can be selected or none selected at all : So in function for data retrieving I want to set any sql criteria under condition if parameter is set, something like this : $quoteModel = Client::where( 'client_id', '>', 0 ); // I DO NOT LIKE THIS LINE if ( !empty( $filtersArray['is_active'] ) ) { $quoteModel->where( 'is_active', $filtersArray['is_active'] ); } if ( !empty( $filtersArray['department_id'] ) ) { $quoteModel->where( 'department_id', $filtersArray['department_id'] ); } if ( !empty( $filtersArray['name'] ) ) { $quoteModel->where( 'name', 'like', '%' . $filtersArray['name'] . '%' ); } return $quoteModel->get(); It works ok for me, except first line: without this fake condition if all 3 parameters(is_active, department_id, name) are not set I would get error that $quoteModel is not set! In this case I do not like query in 1 line, like : $clients = Client::select( 'client_id', 'name', 'login', 'active_till_date' )->onlyActive()->orderBy( $order_by, $order_direction )->get() There could be some more parameters in all possible combinations and this seems very difficult to support. Maybe I could write in any conditional if ( !empty( $filtersArray['is_active'] ) ) { if ( !empty($quoteModel) ) { $quoteModel->where( 'is_active', $filtersArray['is_active'] ); } else { $quoteModel = where( 'is_active', $filtersArray['is_active'] ); } } But is there is a better way? Thanks ! Link to comment Share on other sites More sharing options...
NigelRel3 Posted April 18, 2017 Share Posted April 18, 2017 You could build an array of conditions, where can take something like... $binT = \App\BinType::where([['binTypeID', '>', 1], ['sizeX', '<', 10]])->get(); So if you get to the end of all the possible conditions, you can make a choice of including the where only when you know there are criteria to use. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.