2017-04-26 138 views
0

我laravel雄辩是这样的:为什么不能在laravel 5.3中工作?

public function search(Request $request) 
{ 
    $search = ''; 
    $searchdate = '2017-04-27'; 

    $reports = Report::whereHas('user', function($query) use ($search) 
    { 
     $query->where(function ($q) use($search) 
     { 
      $q->where('name' ,'LIKE' ,'%'.$search.'%'); 
     }); 
    })->orWhereHas('store', function($query) use ($search){ 
     $query->where(function ($q) use($search) 
     { 
      $q->where('name', 'LIKE', '%'.$search.'%'); 
     }); 
    })->orWhereHas('category', function($query) use ($search) 
    { 
     $query->where(function ($q) use($search) 
     { 
      $q->where('name', 'LIKE' , '%'.$search.'%'); 
     }); 
    })->whereDate('created_at','=',$searchdate)->paginate(10); 
} 

执行时,结果不与过滤$searchdate

我怎样才能解决它匹配吗?

更新

我调试了查询,结果是这样的:

SELECT * 
FROM `reports` WHERE (
    EXISTS (SELECT * FROM `users` WHERE `reports`.`user_id` = `users`.`id` AND (`name` LIKE '%%') AND `users`.`deleted_at` IS NULL) 
    OR EXISTS (SELECT * FROM `stores` WHERE `reports`.`reportable_id` = `stores`.`id` AND (`name` LIKE '%%') AND `stores`.`deleted_at` IS NULL) 
    OR EXISTS (SELECT * FROM `categories` WHERE `reports`.`category_id` = `categories`.`id` AND (`name` LIKE '%%') AND `categories`.`deleted_at` IS NULL) 
    AND DATE(`created_at`) = '2017-04-27' 
) 
AND `reports`.`deleted_at` IS NULL 

看来它不工作。由于

和日期(created_at)= '2017年4月27日'

是圆括号内

所以,它必须像这样改变:

SELECT * 
FROM `reports` WHERE (
    EXISTS (SELECT * FROM `users` WHERE `reports`.`user_id` = `users`.`id` AND (`name` LIKE '%%') AND `users`.`deleted_at` IS NULL) 
    OR EXISTS (SELECT * FROM `stores` WHERE `reports`.`reportable_id` = `stores`.`id` AND (`name` LIKE '%%') AND `stores`.`deleted_at` IS NULL) 
    OR EXISTS (SELECT * FROM `categories` WHERE `reports`.`category_id` = `categories`.`id` AND (`name` LIKE '%%') AND `categories`.`deleted_at` IS NULL) 
) 
AND DATE(`created_at`) = '2017-04-27' 
AND `reports`.`deleted_at` IS NULL 

我的问题是如何在雄辩拉拉维尔中改变?

+0

难道就没有人能帮忙吗? –

回答

1

查询更改为

$reports = Report::where(function($q) use ($search){ 
    $q->whereHas('user', function($query) use ($search) { 
     $query->where(function ($q) use($search){ 
      $q->where('name' ,'LIKE' ,'%'.$search.'%'); 
     }); 
    })->orWhereHas('store', function($query) use ($search){ 
     $query->where(function ($q) use($search){ 
      $q->where('name', 'LIKE', '%'.$search.'%'); 
     }); 
    })->orWhereHas('category', function($query) use ($search){ 
     $query->where(function ($q) use($search){ 
      $q->where('name', 'LIKE' , '%'.$search.'%'); 
    }); 
    }); 
})->whereDate('created_at','=',$searchdate)->paginate(10); 

希望它可以帮助

相关问题