为什么 wheredate 在 laravel 5.3 中不起作用? [英] Why wheredate not working in laravel 5.3?

查看:32
本文介绍了为什么 wheredate 在 laravel 5.3 中不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的laravel口才是这样的:

My laravel eloquent is like this :

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

我该如何解决?

更新:

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

I debug the query, the result is like this :

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

好像不行.因为

AND DATE(created_at) = '2017-04-27'

AND DATE(created_at) = '2017-04-27'

在圆括号内

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

So, it must change like this :

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

我的问题是如何在 eloquent laravel 中进行更改?

Which is my problem is how to change in eloquent laravel?

推荐答案

将查询更改为

$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);

希望能帮到你

这篇关于为什么 wheredate 在 laravel 5.3 中不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆