OrWhere is return wrong result #3337
-
I have a query self::select($selected_field) ->where(['status'=>true,'reporting_method'=> 3]) ->orWhere(['status'=>true,'reporting_method'=> '3']) ->get(); it should return results where reporting_method is either 3 or '3' with array:1 [ 0 => array:3 [ "query" => "{ "find" : "reporting_method", "filter" : { "$or" : [ { "$and" : [ { "status" : true }, { "reporting_method" : { "$numberInt" : "3" } } ] }, { "$or" : [ { "status" : true }, { "reporting_method" : "3" } ] } ] }, "projection" : { "_id" : true, "name" : true, "reporting_method" : true } }" "bindings" => [] "time" => 234 ] ] It was working well and good in Lumen 5 but in lumen 10 it is not working well. |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 1 reply
-
By using an array of criteria, Laravel splits them into a list of "where" clauses. select * from "users" where ("status" = ? and "reporting_method" = ?) or ("status" = ? or "reporting_method" = ?) The query generated by the MongoDB Query Builder is consistent with the Laravel behavior: { "$or": [ { "$and": [ { "status": true }, { "reporting_method": 3 } ] }, { "$or": [ { "status": true }, { "reporting_method": "3" } ] } ] } In order to get a self::select($selected_field) ->where(['status' => true, 'reporting_method' => 3]) ->orWhere(fn (Builder $builder) => $builder->where(['status' => true, 'reporting_method' => '3'])) ->get(); You can also write all the query in the same self::select($selected_field) ->where(['$or' => [ ['status' => true, 'reporting_method' => 3]], ['status' => true, 'reporting_method' => '3']], ]]) ->get(); And finally, for this specific case, you can use a self::select($selected_field) ->where('status', '=', true) ->where('reporting_method', 'in', [3, '3']) ->get(); |
Beta Was this translation helpful? Give feedback.
-
Ok Thanks, but i need to change my code at all orWhere Occurance. |
Beta Was this translation helpful? Give feedback.
By using an array of criteria, Laravel splits them into a list of "where" clauses.
Without the MongoDB override, the SQL generated by your query is the following:
The query generated by the MongoDB Query Builder is consistent with the Laravel behavior: