Laravel 查询不使用 where 子句作为日期
Posted
技术标签:
【中文标题】Laravel 查询不使用 where 子句作为日期【英文标题】:Laravel query not using where clause for date 【发布时间】:2021-01-10 11:53:12 【问题描述】:我做了一个 laravel 查询,它获取所有数据但不使用 $startdate 的 where 子句。
$user->studentGroups()->with([
'GroupTasks' => function ($queryTwo) use ($startdate)
return $queryTwo->where('start_date', '>', $startdate); // THIS LINE IS NOT WORKING!!
])->with(['GroupTasks.prgressList' => function ($queryThree) use ($student_id)
return $queryThree->where('progress_student_task_users.mis_id', $student_id); ,
'GroupTasks.studentViews' => function ($queryfour) use ($student_id) return $queryfour->where('student_task_user_vieweds.mis_id', $student_id)->latest(); ,
])->get();
如果没有开始日期,它只会获取所有不是真正想法的数据。 知道如何解决吗?
【问题讨论】:
嗨 Sam,您有用于“$queryTwo”参数的原始查询吗? 这能回答你的问题吗? Laravel - Eloquent "Has", "With", "WhereHas" - What do they mean? @RobertYoung $queryTwo 只是查询构建器的一部分 【参考方案1】:试试这个:
$user->studentGroups()
->with([
'GroupTasks' => function ($query) use ($startdate, $student_id)
return $query->whereDate('start_date', '>', $startdate)
->with([
'prgressList' => function ($query) use ($student_id)
return $query->where('progress_student_task_users.mis_id', $student_id);
,
'studentViews' => function ($query) use ($student_id)
return $query->where('student_task_user_vieweds.mis_id', $student_id)->latest();
,
]);
])->get();
【讨论】:
不,我不断收到错误:未定义变量:student_id【参考方案2】:如果我将 ->get() 移动到 where 子句之后,它会获取包括开始日期在内的数据,但不包括其余的 with !
$user->studentGroups()->with([
'GroupTasks' => function ($queryTwo) use ($startdate)
return $queryTwo->where('start_date', '>', $startdate); // THIS LINE IS NOT WORKING!!
])->get() // ADD GET() HERE NOW WORKS
->with(['GroupTasks.prgressList' => function ($queryThree) use ($student_id)
return $queryThree->where('progress_student_task_users.mis_id', $student_id); ,
'GroupTasks.studentViews' => function ($queryfour) use ($student_id) return $queryfour->where('student_task_user_vieweds.mis_id', $student_id)->latest(); ,
])->get();
【讨论】:
【参考方案3】:尝试改用whereDate()
。
return $queryTwo->whereDate('start_date', '>', $startdate)
另外,尝试将start_date
字段添加到您的GroupTask
模型中,如下所示:
protected $dates = [
'start_date',
'end_date'
];
您可以在此处阅读有关属性转换的更多信息:https://laravel.com/docs/8.x/eloquent-mutators#date-mutators
【讨论】:
我不认为它是日期,查看调试栏查询未使用语句中的 where 子句。 尝试提交第二个with()
。第一个 with() 语句可能被第二个语句重载了。以上是关于Laravel 查询不使用 where 子句作为日期的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Laravel Eloquent 创建多个 Where 子句查询?
如何在 Laravel 中 MySQL 查询的 where 子句中使用数组 [重复]