Eloquent 自动生成和自动更新时间戳
我对Laravel是新手,正在进行数据库迁移。对于一个表,我在表定义中包含了Eloquent 自动生成和自动更新时间戳,eloquent,laravel-5.1,Eloquent,Laravel 5.1,我对Laravel是新手,正在进行数据库迁移。对于一个表,我在表定义中包含了$table->timestamps()快捷方式。令我沮丧的是,我发现在我为表格设定种子后,在处创建的和在处更新的的值都是0000-00-00:00:00 我想更改列定义,使之具有DEFAULT CURRENT\u TIMESTAMP和DEFAULT CURRENT\u TIMESTAMP ON UPDATE CURRENT\u TIMESTAMP,但后来我想知道为什么Eloquent没有这样做。我想这一定是有原因的。我
$table->timestamps()
快捷方式。令我沮丧的是,我发现在我为表格设定种子后,在处创建的和在
处更新的的值都是0000-00-00:00:00
我想更改列定义,使之具有DEFAULT CURRENT\u TIMESTAMP
和DEFAULT CURRENT\u TIMESTAMP ON UPDATE CURRENT\u TIMESTAMP
,但后来我想知道为什么Eloquent没有这样做。我想这一定是有原因的。我想这是为了与支持的不同数据库兼容
如果我继续更改列定义,我是否将自己锁定在MySQL解决方案中?我真的不想记着在每次创建
和插入
时更新时间戳。。。有没有办法用雄辩的习语来做到这一点
相关代码:
// migration method
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string('category');
$table->integer('sort_order')->unsigned();
$table->index('sort_order');
});
}
// seeder method
public function run()
{
$data = [
'Category 1'
, 'Category 2'
];
$sort = 0;
foreach ( $data as $category ) {
DB::table('categories')->insert([
'category' => $category,
'sort_order' => $sort++,
]);
}
}
// database query
mysql> select * FROM categories;
+----+---------------------+---------------------+----------------+------------+
| id | created_at | updated_at | category | sort_order |
+----+---------------------+---------------------+----------------+------------+
| 1 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | Category 1 | 0 |
| 2 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | Category 2 | 1 |
+----+---------------------+---------------------+----------------+------------+
如果您想通过mysql db own实现它,那么您的列属性应该如下所示-
ALTER TABLE mytable
MODIFY COLUMN created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
MODIFY COLUMN modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
现在不要在代码中包含这两列来插入和修改数据,然后mysql会自动将这些列作为当前的_时间戳值填充
如果您传递任何值,则列将用传递的值更新。事实证明,如果我为数据库表建立一个雄辩的模型,那么当我使用该类时,它将自动填充时间戳+1对于RTFM:)您需要使用雄辩的实体来创建对象
请记住,Eloquent将根据类名搜索数据库名称。该课程必须采用单一形式,但雄辩的学生会寻找其复数形式
如果调用的数据库与类不同,则必须添加属性$table
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $table = 'categories'; // not neccessary in this case
}
更新您的实体
$category = CategoryEntity::find($your_category_id);
$category->category = 'your category';
$category->sort_order = 'your sort order';
$category->update();
当您这样使用时,创建的列和更新的列将自动更新。我有一个经验,我刚刚错过了在模型上放置创建的列和更新的列
见下例:
protected $fillable = [
'id',
'name',
'username',
'password',
'created_at',
'updated_at'
];
protected $fillable = [
'id',
'name',
'username',
'password',
'created_at',
'updated_at'
];