3

TIME我的MySQL 数据库中有一个类型为“timeAfter”的列,使用QueryBuilderas创建,$table->time('timeAfter');并将以下内容添加到我的模型中:

public $timestamps = false;

public function getDates () {
    return array ('timeAfter');
}

但是当我运行我的应用程序时,我收到以下错误,似乎Date Mutator需要一个DATEDATETIME但不是一个TIME列..有什么想法吗?

InvalidArgumentException
Unexpected data found. Unexpected data found. Data missing
open:
...\vendor\nesbot\carbon\Carbon\Carbon.php
  }

  if ($dt instanceof \DateTime) {
     return self::instance($dt);
  }

  $errors = \DateTime::getLastErrors();
  throw new \InvalidArgumentException(implode(PHP_EOL, $errors['errors']));
}
public static function createFromTimestamp($timestamp, $tz = null)
4

2 回答 2

5

我刚刚遇到了同样的问题。我在 Raphael_'s note 中创建了一个 mutator,它运行良好。Carbon 很好地解析了 TIME 列。

public function getTimeAfterAttribute($value) {
    return Carbon::parse($value);
}
于 2013-10-06T11:37:47.887 回答
1

就我而言,Carbon::parse()正如@normany 答案中使用的那样,返回了一个异常:

Exception with message 'DateTime::__construct(): Failed to parse time string (50:00:00) at position 0 (5): Unexpected character'

所以我不得不把它改成

return Carbon::createFromFormat('H:i:s', $value);

但是,在我的情况下,该TIME列可以包含大于 24 的小时数。使用'50:00:00',返回值是后天加上 2 小时,这并不是我真正需要的。

因此,我将getTimeAfterAttribute()方法更改如下:

public function getTimeAfterAttribute($value)
{
    list($hours, $minutes, $seconds) = explode(':', $value);
    return CarbonInterval::create(null, null, null, null, $hours, $minutes, $seconds);
}

这样'50:00:00',我得到这个var_dump()输出:

 class Carbon\CarbonInterval#921 (15) {
  public $y =>
  int(0)
  public $m =>
  int(0)
  public $d =>
  int(0)
  public $h =>
  int(50)
  public $i =>
  int(0)
  public $s =>
  int(0)
  public $weekday =>
  int(0)
  public $weekday_behavior =>
  int(0)
  public $first_last_day_of =>
  int(0)
  public $invert =>
  int(0)
  public $days =>
  bool(false)
  public $special_type =>
  int(0)
  public $special_amount =>
  int(0)
  public $have_weekday_relative =>
  int(0)
  public $have_special_relative =>
  int(0)
}
于 2015-06-17T10:16:00.213 回答