使用Laravel插入created_at数据

时间:2014-10-22 11:45:30

标签: php datetime laravel laravel-4

我似乎无法在Laravel的数据库表中插入created_at数据。 我试图从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();

但是它给出了一个错误:

Uncaught exception 'InvalidArgumentException' with message in Carbon.php

Unexpected data found. Unexpected data found. Data missing in Carbon.php

我该如何解决这个问题?我是否需要将模型中的$timestamps设置为false? (我真的不想这样做,因为我很自然地会自动插入updated_at

6 个答案:

答案 0 :(得分:35)

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

public $timestamps = true;

现在,无论何时保存或更新用户,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

答案 1 :(得分:17)

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

protected $fillable = ['name', 'created_at']; 

答案 2 :(得分:8)

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

答案 3 :(得分:7)

目前(Laravel 5.4)实现这一目标的方法是:

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

答案 4 :(得分:1)

在我的情况下,我想单元测试,用户在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]
);

注意:除了单元测试以外的任何其他内容,我会在这里查看其他答案。

答案 5 :(得分:0)

我喜欢这种方法:

use Carbon\Carbon;

注意:包括class ExcelImport implements ToCollection { /** * @param Collection $collection */ public function collection(Collection $collection) { $array = $collection->toArray(); $outervalues = array_values($array); $new_array = []; foreach ( $outervalues as $key => $value_inner_array ) { foreach ($value_inner_array as $key => $innervalue) { array_push($new_array, $innervalue); } } $text = implode(',',$new_array); $clean_text = str_replace(","," ", $text); $newText = new fulltext([ 'text' => $clean_text ]); $newText->save(); } }