forge->addField([ 'podcast_id' => [ 'type' => 'INT', 'unsigned' => true, ], 'date' => [ 'type' => 'DATE', ], 'duration' => [ // a hit in analytics podcast increments this value when a podcast is listened to in a given date. // Here, the "cumulative listening time" on a podcast per day // cannot surpass 999,999,999,999.999 seconds (~277,777,777 hours) - should be enough. 'type' => 'DECIMAL(15,3)', 'unsigned' => true, ], 'bandwidth' => [ 'type' => 'BIGINT', 'unsigned' => true, ], 'unique_listeners' => [ 'type' => 'INT', 'unsigned' => true, 'default' => 1, ], 'hits' => [ 'type' => 'INT', 'unsigned' => true, 'default' => 1, ], ]); $this->forge->addPrimaryKey(['podcast_id', 'date']); $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); $this->forge->createTable('analytics_podcasts'); } public function down(): void { $this->forge->dropTable('analytics_podcasts'); } }