Вставка данных created_at с помощью Laravel
Я не могу вставлять данные 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();
Но это дает ошибку:
Uncaught exception 'InvalidArgumentException' with message in Carbon.php
и
Unexpected data found. Unexpected data found. Data missing in Carbon.php
Как я могу это решить? Нужно ли устанавливать $timestamps
в моих моделях на false? (Я действительно не хочу этого делать, потому что я в порядке с тем, как он автоматически вставляет updated_at
)
Ответы
Ответ 1
В вашей модели User
добавьте следующую строку в класс User
:
protected $timestamps = true;
Теперь, когда вы сохраняете или обновляете пользователя, Laravel автоматически обновляет поля created_at
и updated_at
.
Обновление:
Если вы хотите установить созданное вручную, вы должны использовать формат даты Y-m-d H:i:s
. Проблема в том, что используемый вами формат не совпадает с тем, который использует Laravel для поля created_at
.
Ответ 2
Вы можете вручную установить это с помощью Laravel, просто не забудьте добавить 'created_at' в ваш $fillable array:
protected $fillable = ['name', 'created_at'];
Ответ 3
$data = array();
$data['created_at'] =new \DateTime();
DB::table('practice')->insert($data);
Ответ 4
В настоящее время (Laravel 5.4) способ достижения этого:
$model = new Model();
$model->created_at = Carbon::now();
$model->save(['timestamps' => false]);