我似乎无法在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
)
答案 0 :(得分:35)
在User
模型中,在User
类中添加以下行:
public $timestamps = true;
现在,无论何时保存或更新用户,Laravel都会自动更新created_at
和updated_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();
}
}