Mus*_*abe 15 php timestamp laravel eloquent
我正在使用Laravel 5.1.为简单起见,我有以下代码
移民:
Schema::create('sitemap_data', function (Blueprint $table) {
// Primary and foreign keys
$table->increments('id');
$table->string('postUrl');
// Database functions
$table->timestamps();
});
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的其他地方的代码
$sitemapData = SitemapData::firstOrNew([
'postUrl' => $post
]);
$sitemapData->save();
Run Code Online (Sandbox Code Playgroud)
现在,根据Laravel文档
同样,updated_at时间戳将自动更新,因此无需手动设置其值
应在表中更新updated_at值.但是,这种情况并没有发生.
它只在第一次插入时设置,但不在更新时设置.当我手动完成时,就像这样
$sitemapData = SitemapData::firstOrNew([
'postUrl' => $post
]);
$sitemapData->updated_at = Carbon::now();
$sitemapData->save();
Run Code Online (Sandbox Code Playgroud)
有用.但是,文档说这应该自动发生,所以这里有什么问题?
我在stackoverflow上搜索了一些关于这个问题的网站,但是我发现了Laravel 3或4.1,4.2等的网站.
我该怎么做呢?
问题中的情况并非如此,但如果您使用查询生成器而不是雄辩模型,则会发生同样的问题。
如果你这样做
DB::table('users')->where()->update()
Run Code Online (Sandbox Code Playgroud)
代替
User::where()->update()
Run Code Online (Sandbox Code Playgroud)
Updated_at 将不会更新。
实际上是可能的:
$model->updated_at = Carbon::now();
$model->save(['timestamps' => FALSE]);
Run Code Online (Sandbox Code Playgroud)
这将正确保存updated_at到现在。如果您不确定模型的任何列是否已更改,但您确实想更新updated_at无论如何 - 这就是要走的路。
小智 5
是的,Musterknabe所做的是正确的,但他还应该检查他的模型SitemapData.php,它应该设置$timestamps = true;
<?php
class SitemapData extends Eloquent {
public $timestamps = true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21579 次 |
| 最近记录: |