我目前有一个名为operators
的表
列为:
id, user_id, item_clicked, created_at, updated_at
我可以确认其中之一具有今天的update_at 2019-08-05显示为今天。
这是一个关系表。 运算符属于用户。
我试图让用户的运营商的日期在今天。 我的代码是:
$ordersClicked = User::with('operators')
->whereDate('updated_at', \Carbon\Carbon::today())
->get();
这将返回一个空数组。
进行测试可以使我知道所需的数据在那里。
$ordersClicked = User::with('operators')
->get();
$operator = Operator::whereDate('updated_at', \Carbon\Carbon::today())->get();
知道我在做什么错吗?
答案 0 :(得分:0)
根据文档https://carbon.nesbot.com/docs/ Carbon::today()
,如果您像在where子句中那样使用并且数据库以Y-m-d H:i:s
格式存储值,则返回Y-m-d
。
你为什么不试试这个:
$ordersClicked = User::with('operators')
->whereDate('updated_at', \Carbon\Carbon::today()->format('Y-m-d'))
->get();
如果这不起作用;那么雄辩者可能会在where
表的updated_at
上应用User
子句,而不是Operator
。您是说要这样做吗?
$ordersClicked = User::with(['operators' => function($query) {
$query->where('updated_at', \Carbon\Carbon::today()->format('Y-m-d'))
}])->get();
即对急切加载的集合进行过滤?如果这是您的预期,将发生的事情是它将返回所有用户,并且只有某些具有updated_at
符合条件的运算符将具有值,而其他运算符将为空。
反转查询会更好吗?即确保Operator
在belongsTo
模型上具有User
关系,并按以下方式查询数据:
$operator = Operator::whereDate('updated_at', \Carbon\Carbon::today())
->with('user')
->get();