Php 使用Laravel在数据处插入已创建的_
我似乎无法使用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
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);