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
を自動的に挿入する方法に満足しているので、私は本当にそうしたくありません。)
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
です。
Laravelを使用してこれを手動で設定できます。「created_at」を$ fillable配列に追加することを忘れないでください:
protected $fillable = ['name', 'created_at'];
現在(Laravel 5.4)これを達成する方法は次のとおりです。
$model = new Model();
$model->created_at = Carbon::now();
$model->save(['timestamps' => false]);
$data = array();
$data['created_at'] =new \DateTime();
DB::table('practice')->insert($data);
私の場合、単体テストユーザーは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]
);
注:単体テスト以外の場合は、ここで他の回答を確認します。