带有嵌套whereDate

时间:2019-08-05 23:53:21

标签: laravel eloquent

我目前有一个名为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();

知道我在做什么错吗?

1 个答案:

答案 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符合条件的运算符将具有值,而其他运算符将为空。

反转查询会更好吗?即确保OperatorbelongsTo模型上具有User关系,并按以下方式查询数据:

$operator = Operator::whereDate('updated_at', \Carbon\Carbon::today())
    ->with('user')
    ->get();