Php 使用Laravel在数据处插入已创建的_

Php 使用Laravel在数据处插入已创建的_,php,datetime,laravel,laravel-4,Php,Datetime,Laravel,Laravel 4,我似乎无法使用Laravel在数据库表中插入created_at数据。 我试图从帖子中获取数据,然后将其保存到数据库中 我现在是这样做的: $create_dt = date("Y-m-d H:i:s A", strtotime($_POST['post_date']." ".$_POST['post_time'])); $name = $_POST['name']; $post = new Post(); $post->name = $name; ... $post->creat

我似乎无法使用Laravel在数据库表中插入
created_at
数据。 我试图从帖子中获取数据,然后将其保存到数据库中

我现在是这样做的:

$create_dt = date("Y-m-d H:i:s A", strtotime($_POST['post_date']." ".$_POST['post_time']));
$name = $_POST['name'];

$post = new Post();
$post->name = $name;
...
$post->created_at = $create_dt;
$post->save();
但它给出了一个错误:

Uncaught exception 'InvalidArgumentException' with message in Carbon.php


我怎样才能解决这个问题?我是否需要将模型中的
$timestamps
设置为false?(我真的不想这样做,因为我不知道它是如何自动插入
更新的\u的)

在您的
用户
模型中,在
用户
类中添加以下行:

public $timestamps = true;
现在,无论何时保存或更新用户,Laravel都会自动更新在
处创建的
和在
处更新的
字段


更新:
如果要手动设置创建日期,应使用日期格式
Y-m-d H:i:s
。问题是您使用的格式与Laravel在
字段中创建的
不同

更新:2018年11月Laravel 5.6
“消息”:“应用程序的访问级别\\注意::$时间戳必须是公共的”,

同时确保您具有适当的访问级别。Laravel 5.6是
公共的

您可以使用Laravel手动设置,只需记住将“created_at”添加到$filleble数组中:

protected $fillable = ['name', 'created_at']; 
目前(Laravel 5.4)实现这一目标的方法是:

$model = new Model();
$model->created_at = Carbon::now();
$model->save(['timestamps' => false]);

在我的例子中,我想单元测试用户在1小时后无法验证他们的电子邮件地址,因此我不想做任何其他回答,因为在不进行单元测试的情况下,它们也会持续存在,所以我在插入后手动更新行:

// Create new user
$user = factory(User::class)->create();

// Add an email verification token to the 
// email_verification_tokens table
$token = $user->generateNewEmailVerificationToken();

// Get the time 61 minutes ago
$created_at = (new Carbon())->subMinutes(61);

// Do the update
\DB::update(
    'UPDATE email_verification_tokens SET created_at = ?',
    [$created_at]
);
注意:对于单元测试以外的任何问题,我将在这里查看其他答案。

我喜欢这种方法:

$data = array();
$data['created_at'] = Carbon::now();

DB::table('list')->insert($data);

注意:包括
使用碳\碳

Laravel将自动设置created_at字段,如果您在模型中启用
$timestamps
。您真的允许用户手动输入日期/时间(永远不要相信用户输入)@Jerodev@MarkBaker我需要手动插入
创建的_,因为用户应该能够在将来安排发布。我只给出了
用户
模型作为一个例子。在这种情况下,为什么不添加另一个名称不为
创建的字段
不会有两个创建日期,会有一个实际创建日期(自动填充)和一个
预定日期
发布日期
或任何你选择的名称,每个反映不同内容的内容我需要手动插入在
日期创建的
,因为用户应该能够在将来安排发布。在
处更新的
应该像Laravel doesI使用的
Y-m-d H:i:s A
一样自动插入。那么我应该放弃AM/PM部分吗?当然可以?这是受保护的,公开的。可能在Laravel 5.1中有所改变,但问题是针对Laravel 4.:)这个答案在新版本中不起作用$时间戳应该是“公共”的,并且手动创建的时间戳集不起作用。不需要手动这样做。当我们第一次插入时,Laravel已经做了。在大多数情况下,有时您可能需要稍微修改它(可能是api的延迟?)
// Create new user
$user = factory(User::class)->create();

// Add an email verification token to the 
// email_verification_tokens table
$token = $user->generateNewEmailVerificationToken();

// Get the time 61 minutes ago
$created_at = (new Carbon())->subMinutes(61);

// Do the update
\DB::update(
    'UPDATE email_verification_tokens SET created_at = ?',
    [$created_at]
);
$data = array();
$data['created_at'] = Carbon::now();

DB::table('list')->insert($data);