为什么 wheredate 在 laravel 5.3 中不起作用?
Why wheredate not working in laravel 5.3?
我的laraveleloquent是这样的:
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
好像不行。因为
AND DATE(created_at
) = '2017-04-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
我的问题是eloquentlaravel怎么改?
将查询更改为
$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);
希望对您有所帮助
我的laraveleloquent是这样的:
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
好像不行。因为
AND DATE(
created_at
) = '2017-04-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
我的问题是eloquentlaravel怎么改?
将查询更改为
$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);
希望对您有所帮助