2017-06-07 28 views
1

这是我的代码:laravel like query is not working?

$lists = DB::table('connection_request as cr') 
        ->leftJoin('users as u', function($join) 
         { 
          $join->on('u.id', '=', 'cr.sender_id')->orOn('u.id','=', 'cr.receiver_id'); 
         }) 
        ->select('cr.id as connection_id','cr.sender_id as sen_id','cr.receiver_id as rec_id','cr.approve_status','u.id','u.user_type','u.user_type_id',DB::raw("IF(u.avatar = '', 'uploads/avatar/default.jpg', u.avatar) as avatar"),'u.name','u.email') 
        ->where(function($query) use ($user_id) 
         { 
         if(!empty($user_id)): 
          $query->Where('cr.receiver_id','=', $user_id); 
         endif; 
         if(!empty($user_id)): 
          $query->orWhere('cr.sender_id','=', $user_id); 
         endif; 
        }) 
        ->where(function($query) use ($searchValue) 
         { 
         if(!empty($searchValue)): 
          $query->Where('u.name','like', '%' . $searchValue . '%'); 
          $query->orWhere('u.email','like', '%' . $searchValue . '%'); 
         endif; 
        }) 
        ->where('cr.approve_status','=',1) 
        ->where('u.id','!=',$user_id) 
        ->get(); 

,并提供MySQL查询像这样

select `cr`.`id` as `connection_id`, `cr`.`sender_id` as `sen_id`, `cr`.`receiver_id` as `rec_id`, `cr`.`approve_status`, `u`.`id`, `u`.`user_type`, `u`.`user_type_id`, IF(u.avatar = '', 'uploads/avatar/default.jpg', u.avatar) as avatar, `u`.`name`, `u`.`email` from `connection_request` as `cr` left join `users` as `u` on `u`.`id` = `cr`.`sender_id` or `u`.`id` = `cr`.`receiver_id` where (`cr`.`receiver_id` = 10 or `cr`.`sender_id` = 10) and (`u`.`name` LIKE 'pri' or `u`.`email` LIKE 'pri') and `cr`.`approve_status` = 1 and `u`.`id` != 10 

所以,我没有能够得到的结果,因为像后,它应该有%符号,但是,产生laravel查询没有百分号

我下面原始查询工作完美

select `cr`.`id` as `connection_id`, `cr`.`sender_id` as `sen_id`, `cr`.`receiver_id` as `rec_id`, `cr`.`approve_status`, `u`.`id`, `u`.`user_type`, `u`.`user_type_id`, IF(u.avatar = '', 'uploads/avatar/default.jpg', u.avatar) as avatar, `u`.`name`, `u`.`email` from `connection_request` as `cr` left join `users` as `u` on `u`.`id` = `cr`.`sender_id` or `u`.`id` = `cr`.`receiver_id` where (`cr`.`receiver_id` = 10 or `cr`.`sender_id` = 10) and (`u`.`name` LIKE '%pri%' or `u`.`email` LIKE '%pri%') and `cr`.`approve_status` = 1 and `u`.`id` != 10 

请检查和帮助我的家伙,

感谢

+1

Where!= where where? – Kyslik

+0

您使用的是什么版本的Laravel? – Jerodev

回答

1

就个人而言,我使用的,它的工作原理相当好...

$query->where('u.name','LIKE', "%{$searchValue}%")->get(); 
1

你在那里的条件也可以是这样的.. 它会运行

->where(function($query) use ($searchValue) 
         { 
         if(!empty($searchValue)): 
         $query->Where('u.name','like', DB::raw("'%$searchValue%'")); 
         $query->orWhere('u.email','like', DB::raw("'%$searchValue%'")); 
         endif; 
        })