我试图通过使用whereHas
方法获得两个日期之间的工作关系,但我一直得到Integrity constraint violation
,我不确定是什么原因导致这个问题。
我尝试使用with
和where
方法,但它们都返回相同的错误。
错误:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'created_at' in where clause
is ambiguous (SQL: select * from `categories` where exists (select * from `jobs` inner
join `category_job` on `jobs`.`id` = `category_job`.`job_id` where `categories`.`id` = `category_job`.`category_id` and `created_at` = `=<` and `created_at` >= `2022-06-19 23:59:59`))
功能:
/**
*
*/
public function categoriesThisWeek()
{
$categoriesThisWeek = Category::with('jobs')
->whereHas("jobs", function ($query) {
$query
->whereColumn('created_at', '=<', Carbon::now()->startOfWeek())
->whereColumn('created_at', '>=', Carbon::now()->endOfWeek());
});
return $categoriesThisWeek->get();
}
这两个表可能都有一个created_at
列,所以您需要指定要使用哪个(tbl1.created_at
)。
您有两个错误,一个是使用whereColumn
而不是where
而不精确表并使用值(whereColumn是将一列与另一列进行比较),另一个是使用不存在的操作符=<
。
public function categoriesThisWeek()
{
$categoriesThisWeek = Category::with('jobs')
->whereHas("jobs", function ($query) {
$query
->where('created_at', '<=', Carbon::now()->startOfWeek())
->where('created_at', '>=', Carbon::now()->endOfWeek());
});
return $categoriesThisWeek->get();
}