【问题标题】:LARAVEL Update data using arrayLARAVEL 使用数组更新数据
【发布时间】:2018-02-07 07:49:43
【问题描述】:

我想使用数组更新我的数据,但它的错误导致我在查找数据时使用“like”查询。这是代码。

$pin = 10590;
$datetime = "2017-08-29 15:05:00";
$date = explode(' ', $datetime);
Attendance::where('user_id', $pin)->where('datetime_in', 'like', '%' . $date[0] . '%')->update([
   'datetime_out' => $datetime,
   'updated_at' => date('Y-m-d')
]);

任何解决方案?谢谢。

【问题讨论】:

  • 应该没有错误。你能添加调试器的详细输出吗?
  • @Buglinjo 服务器现在已关闭,所以我无法显示输出,但如果我在 mysql 中运行代码,错误是这样的Incorrect datetime value: '%2017-08-29%' for column 'datetime_in'
  • 您应该在 varchar 或文本上使用 like 过滤器,而不是日期时间。在日期时间只需使用 =
  • @Buglinjo 喜欢这样吗? UPDATE attendance SET datetime_out="2017-08-29 15:06:00" WHERE user_id = 201037917001 AND datetime_in = "2017-08-29";
  • 像这样:Attendance::where('user_id', $pin)->where('datetime_in', '=', $date[0])->update([ 'datetime_out' => $datetime, 'updated_at' => date('Y-m-d') ]);

标签: arrays laravel eloquent sql-update


【解决方案1】:

您无法使用 like 比较日期时间列。

使用 = 进行比较,如 cmets 中所建议的那样,也不会产生所需的结果,将 2017-08-29 插值到 2017-08-29 00:00:00(请参阅 SO Answer)。

1.将列转换为 DATE

假设您使用的是 MySQL,您可以将查询列的类型转换为 DATE,如下所示:

$query->whereRaw('DATE(datetime_in) = ?', [$day])…

PostgreSQL:

$query->whereRaw('datetime_in::date = ?', [$day])…

2。之间的位置

或者,您可以使用whereBetween 进行查询,并使用Carbon 将开始结束日期指定为时间。

use Carbon\Carbon;

$startOfDay = new Carbon($datetime)->startOfDay();
$endOfDay = new Carbon($datetime)->endOfDay();

$query->whereBetween('datetime_in', [$startOfDay, $endOfDay])…

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2019-08-09
    相关资源
    最近更新 更多