table = $db->prefix . 'us_policies'; } public function insert( Policy $policy ): int { $this->db->insert( $this->table, [ 'title' => $policy->title, 'slug' => $policy->slug, 'current_version_id' => $policy->currentVersionId, 'created_at' => current_time( 'mysql' ), ], [ '%s', '%s', '%d', '%s' ] ); return $this->db->insert_id; } public function updateCurrentVersion( int $policyId, int $versionId ): bool { return false !== $this->db->update( $this->table, [ 'current_version_id' => $versionId ], [ 'id' => $policyId ], [ '%d' ], [ '%d' ] ); } /** * All policies, ordered by title. * * @return list */ public function findAll(): array { $rows = $this->db->get_results( "SELECT * FROM {$this->table} ORDER BY title ASC" ); return array_map( Policy::fromRow( ... ), $rows ?? [] ); } public function findById( int $id ): ?Policy { $row = $this->db->get_row( $this->db->prepare( "SELECT * FROM {$this->table} WHERE id = %d", $id ) ); return $row ? Policy::fromRow( $row ) : null; } public function findBySlug( string $slug ): ?Policy { $row = $this->db->get_row( $this->db->prepare( "SELECT * FROM {$this->table} WHERE slug = %s", $slug ) ); return $row ? Policy::fromRow( $row ) : null; } public function delete( int $id ): bool { return (bool) $this->db->delete( $this->table, [ 'id' => $id ], [ '%d' ] ); } }