public function release($message_id, $subscriber_id = null)
{
$trx = models\DbMessage::getDb()->transaction !== null ? null : models\DbMessage::getDb()->beginTransaction();
$primaryKey = models\DbMessage::primaryKey();
$tableName = models\DbMessage::tableName();
$message_ids = array_map(function ($row) use($primaryKey) {
return array_intersect_key($row, array_flip($primaryKey));
}, models\DbMessage::find()->withQueue($this->id)->withSubscriber($subscriber_id)->reserved($this->timeout)->select(array_map(function ($pk) use($tableName) {
return $tableName . '.' . $pk;
}, array_merge($primaryKey, ['subscription_id'])))->andWhere(['in', $tableName . '.id', $message_id])->asArray()->all());
models\DbMessage::updateAll(['status' => Message::AVAILABLE], ['in', $primaryKey, $message_ids]);
if ($trx !== null) {
$trx->commit();
}
return $message_ids;
}