getTable('talk_rooms'); if (!$table->hasColumn('last_message')) { $table->addColumn('last_message', Types::BIGINT, [ 'notnull' => false, 'default' => 0, ]); } return $schema; } /** * @param IOutput $output * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` * @param array $options * @since 13.0.0 */ #[\Override] public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { $update = $this->connection->getQueryBuilder(); $update->update('talk_rooms') ->set('last_message', $update->createParameter('message')) ->where($update->expr()->eq('id', $update->createParameter('room'))); $query = $this->connection->getQueryBuilder(); $query->selectAlias($query->createFunction('MAX(' . $query->getColumnName('id') . ')'), 'message') ->addSelect('object_id') ->from('comments') ->where($query->expr()->eq('object_type', $query->createNamedParameter('chat'))) ->groupBy('object_id'); $result = $query->executeQuery(); while ($row = $result->fetch()) { $update->setParameter('message', $row['message']) ->setParameter('room', $row['object_id']); $update->executeStatement(); } $result->closeCursor(); } }