laravel insert date发出异常

时间:2014-05-03 06:47:44

标签: php laravel laravel-4

我试图简单地在数据库表字段中插入日期,这给我一个错误。显示的错误是

ErrorException
Object of class DateTime could not be converted to string

控制器的代码是:

.....

    $date = new DateTime('2000-01-01');
.....
$userModel->createUserAccount($email, $username, $password, $firstName, $lastName, $activationToken, $date);

并且在模型中(我认为导致错误):

public function createUserAccount($email, $username, $password, $firstName, $lastName, $activationToken, $randomDate)
    {
        /*This function will handle creating the new account for the guest*/

        DB::table('users')->insert(
            array('email' => $email, 'username' => $username, 'password'=> md5($password), 'first_name'=>$firstName, 'last_name'=>$lastName, 'activation'=>0, 'activation_token'=>$activationToken, 'session_token'=>null, 'ceated_on'=>$randomDate, 'last_updated'=>$randomDate));

    }

我希望得到任何可能的支持

2 个答案:

答案 0 :(得分:1)

您必须格式化DateTime对象以在数据库中插入它的值:

$date = (new DateTime('2000-01-01'))->format('Y-m-d');

或:

$date = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');

在这种情况下,第二个选项有点多余(因为您没有在示例中指定时间),但如果您使用自己的自定义替换默认时间戳,则可能应该使用时间溶液

然而,更好的选择是使用作为Laravel一部分的Carbon类,因为它更方便:

$date = Carbon::create(2000, 1, 1);

答案 1 :(得分:1)

继@kajetons回答之后,如果你在users模型中创建一个mutator函数,那么你可以获取任何指定格式的日期并将其转换为数据库的approfpriate格式,这将发生在你自动而且每次都不需要这样做。

在这种情况下:

public function setLastUpdatedAttribute($value)
{
  if($value != ""){
    $this->attributes['last_updated'] = Carbon::createFromFormat('d/m/Y', $value)->toDateString();
  }
}