数据库_同步触发器

通过配置db_table_triggers字段可以同步触发器到数据,推荐尽量使用触发器而不是使用commit,rollback机制,毕竟触发器的回滚是在数据库内部完成,更加安全

相当于可以在php中写数据库触发器了,引用常量,调整逻辑都很方便,可以更好的适配业务逻辑

比如:./__project__/class/db/User.class.php中的触发器代码

解释:
当user表中的,user_isban,user_isdelete,user_password_hash变化后,user_version同步变化,如果其他设备登录的同一个账户,会检测到user_version的变化,被踢下线,强制登出
在更改了用户名后同步记录最后更改的时间,user_usernamelastedittime,如果需要限定用户名更改频率的话,可以用到

static function db_table_config()
{
	$triggers=[];

	$code='';

	$code.='

			BEGIN
				IF
					NEW.user_isban!=OLD.user_isban OR
					NEW.user_isdelete!=OLD.user_isdelete OR
					NEW.user_password_hash!=OLD.user_password_hash

				THEN

					SET NEW.user_version=NEW.user_version+1;

				END IF;

				IF
					NEW.user_name!=OLD.user_name
				THEN

					SET NEW.user_usernamelastedittime=unix_timestamp();

				END IF;

			END

		';

	$triggers['update/before']=$code;

	return
	[

		'db_table_serializedfileds'=>
		[
			'user_autologin_tokens',
			'user_access_tokens',
			'user_currentlogin_sessionids',
		],

		'db_table_triggers'=>$triggers,

	];
}

为什么这么做?

触发器在实际开发中用的并不多,原因就是代码逻辑变化了之后,mysql那边还要手动去改,比较麻烦且不踏实,设计触发器同步就是为了解决这个问题,项目中如果有其他新人进来也可以通过搜索相关字段就发现运行逻辑是什么,而不是调试bug半天了都想不到是触发器那边的问题