使用Laravel插入created_at数据

max*_*n15 28 php datetime laravel laravel-4

我似乎无法created_at使用Laravel在数据库表中插入数据.我正在尝试从POST获取该数据,然后尝试将其保存到数据库中.

我现在这样做:

$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();
Run Code Online (Sandbox Code Playgroud)

但它给出了一个错误:

Uncaught exception 'InvalidArgumentException' with message in Carbon.php
Run Code Online (Sandbox Code Playgroud)

Unexpected data found. Unexpected data found. Data missing in Carbon.php
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?我需要将$timestamps模型设置为false吗?(我真的不想这样做因为我很自然地插入了它updated_at)

Jer*_*dev 40

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

public $timestamps = true;
Run Code Online (Sandbox Code Playgroud)

现在,无论何时保存或更新用户,Laravel都会自动更新created_atupdated_at字段.


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

更新:2018年11月Laravel 5.6 "message": "Access level to App\\Note::$timestamps must be public", 确保您拥有适当的访问级别.Laravel 5.6是public.

  • 这个答案在新版本中不起作用.$ timestamps应为'public',并且手动设置created_at不起作用. (4认同)
  • 肯定的?它受到保护,在文件中公开.http://laravel.com/docs/5.1/eloquent (2认同)

Sab*_*ett 19

您可以使用Laravel手动设置它,只需记住将'created_at'添加到$ fillable数组:

protected $fillable = ['name', 'created_at']; 
Run Code Online (Sandbox Code Playgroud)

  • 在大多数情况下-有时您可能需要对其稍加更改(也许是来自api的延迟?) (3认同)
  • 无需手动执行此操作.当我们第一次插入时,Laravel已经这样做了. (2认同)

eit*_*hed 10

当前(Laravel 5.4)实现此目的的方法是:

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


soc*_*cm_ 8

$data = array();
$data['created_at'] =new \DateTime();
DB::table('practice')->insert($data);
Run Code Online (Sandbox Code Playgroud)