Starting from version v2.8, if the time fields created_at, updated_at, and deleted_at are Boolean fields, the ORM component will automatically recognize and support them, writing Boolean type values (represented by 0 and 1). Typically, the Boolean field is the deleted_at field, and we only demonstrate the case where the deleted_at field is of type bool.
Example SQL
This is the MySQL table structure used in the example code that follows.
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`status` tinyint DEFAULT 0,
`created_at` int(10) unsigned DEFAULT NULL,
`updated_at` int(10) unsigned DEFAULT NULL,
`deleted_at` bit(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
We recommend using bit(1) to represent the bool type for the field instead of tinyint(1) or int(1) because the range of tinyint(1)/int(1) is -127~127, which is often used as a status field type. The range of bit(1) is 0/1, which can effectively represent the two values false/true of the bool type.
If you try to test and view the ORM operation execution SQL statements, it is recommended to enable the debug mode (related documentation: ORM Senior - Debug Mode), and the SQL statements will be automatically printed to the log output.
created_at Write Time
// INSERT INTO `user`(`name`,`created_at`,`updated_at`,`deleted_at`) VALUES('john',1731481488,1731481488,0)
g.Model("user").Data(g.Map{"name": "john"}).Insert()
deleted_at Data Soft Deletion
// UPDATE `user` SET `deleted_at`=1 WHERE (`id`=10) AND `deleted_at`=0
g.Model("user").Where("id", 10).Delete()
Some changes occur during the query, for example:
// SELECT * FROM `user` WHERE (id>1) AND `deleted_at`=0
g.Model("user").Where("id>?", 1).All()