简体   繁体   中英

When submitting NULL values laravel eloquent query does not give the correct results

I want to create a filter with these fields

过滤器

if i dont fill some fields and submitted null values the following query not works.

$posts = Post::where('brand',$brand)
                 ->where('country',$country)
                 ->where('city',$city)
                 ->where('car_type',$car_type)
                 ->where('color','LIKE',$color)
                 ->whereBetween('year',[$from_year,$to_year])
                 ->whereBetween('milage',[$min_milage,$max_milage])
                 ->whereBetween('price',[$min_price,$max_price])
                 ->where('warranty',$warranty)
                 ->where('seller_type',$seller_type)
                 ->paginate(4);  

That's because you tell eloquent to check for NULL in the database, which results in a query like this:

WHERE brand IS NULL AND ... AND seller_type IS NULL 

To avoid it, you must not apply filters on your query if you actually don't want to filter. Filter for set values only like this:

$posts = Post::all();

if( !is_null($brand) )
    $posts = $posts->where('brand', $brand)

// ...

if( !is_null($seller_type) )
    $posts = $posts->where('seller_type', $seller_type)

$posts = $posts->paginate(4); 

Note: You can get the query that's being generated with the toSQL method:

dd( $posts->toSql() );

Very handy for debugging.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM