web-dev-qa-db-ja.com

created = atデータの挿入Laravel

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を自動的に挿入する方法に満足しているので、私は本当にそうしたくありません。)

27
maxxon15

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です。

38
Jerodev

Laravelを使用してこれを手動で設定できます。「created_at」を$ fillable配列に追加することを忘れないでください:

protected $fillable = ['name', 'created_at']; 
19
Sabrina Leggett

現在(Laravel 5.4)これを達成する方法は次のとおりです。

$model = new Model();
$model->created_at = Carbon::now();
$model->save(['timestamps' => false]);
8
eithed
$data = array();
$data['created_at'] =new \DateTime();
DB::table('practice')->insert($data);
8
socm_

私の場合、単体テストユーザーは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]
);

注:単体テスト以外の場合は、ここで他の回答を確認します。

1
Mike