Class yii\mongodb\BatchQueryResult

Inheritanceyii\mongodb\BatchQueryResult » yii\base\BaseObject
ImplementsIterator
Available since extension's version2.1
Source Code https://github.com/yiisoft/yii2-mongodb/blob/master/src/BatchQueryResult.php

BatchQueryResult represents a batch query from which you can retrieve data in batches.

You usually do not instantiate BatchQueryResult directly. Instead, you obtain it by calling yii\mongodb\Query::batch() or yii\mongodb\Query::each(). Because BatchQueryResult implements the Iterator interface, you can iterate it to obtain a batch of data in each iteration. For example,

$query = (new Query())->from('user');
foreach ($query->batch() as $i => $users) {
    // $users represents the rows in the $i-th batch
}
foreach ($query->each() as $user) {
}

Public Properties

Hide inherited properties

Property Type Description Defined By
$batchSize integer The number of rows to be returned in each batch. yii\mongodb\BatchQueryResult
$db yii\mongodb\Connection The MongoDB connection to be used when performing batch query. yii\mongodb\BatchQueryResult
$each boolean Whether to return a single row during each iteration. yii\mongodb\BatchQueryResult
$query yii\mongodb\Query The query object associated with this batch query. yii\mongodb\BatchQueryResult

Public Methods

Hide inherited methods

Method Description Defined By
current() Returns the current dataset. yii\mongodb\BatchQueryResult
key() Returns the index of the current dataset. yii\mongodb\BatchQueryResult
next() Moves the internal pointer to the next dataset. yii\mongodb\BatchQueryResult
reset() Resets the batch query. yii\mongodb\BatchQueryResult
rewind() Resets the iterator to the initial state. yii\mongodb\BatchQueryResult
valid() Returns whether there is a valid dataset at the current position. yii\mongodb\BatchQueryResult

Protected Methods

Hide inherited methods

Method Description Defined By
fetchData() Fetches the next batch of data. yii\mongodb\BatchQueryResult

Property Details

Hide inherited properties

$batchSize public property

The number of rows to be returned in each batch.

public integer $batchSize 100
$db public property

The MongoDB connection to be used when performing batch query. If null, the "mongodb" application component will be used.

$each public property

Whether to return a single row during each iteration. If false, a whole batch of rows will be returned in each iteration.

public boolean $each false
$query public property

The query object associated with this batch query. Do not modify this property directly unless after reset() is called explicitly.

public yii\mongodb\Query $query null

Method Details

Hide inherited methods

current() public method

Returns the current dataset.

This method is required by the interface Iterator.

public mixed current ( )
return mixed

The current dataset.

                #[\ReturnTypeWillChange]
public function current()
{
    return $this->_value;
}

            
fetchData() protected method

Fetches the next batch of data.

protected array fetchData ( )
return array

The data fetched

                protected function fetchData()
{
    if ($this->_iterator === null) {
        $this->query->addOptions(['batchSize' => $this->batchSize]);
        $cursor = $this->query->buildCursor($this->db);
        $token = 'fetch cursor id = ' . $cursor->getId();
        Yii::info($token, __METHOD__);
        if ($cursor instanceof \Iterator) {
            $this->_iterator = $cursor;
        } else {
            $this->_iterator = new \IteratorIterator($cursor);
        }
        $this->_iterator->rewind();
    }
    $rows = [];
    $count = 0;
    while ($count++ < $this->batchSize) {
        if (!$this->_iterator->valid()) {
            break;
        }
        $rows[] = $this->_iterator->current();
        $this->_iterator->next();
    }
    return $this->query->populate($rows);
}

            
key() public method

Returns the index of the current dataset.

This method is required by the interface Iterator.

public integer key ( )
return integer

The index of the current row.

                #[\ReturnTypeWillChange]
public function key()
{
    return $this->_key;
}

            
next() public method

Moves the internal pointer to the next dataset.

This method is required by the interface Iterator.

public void next ( )

                #[\ReturnTypeWillChange]
public function next()
{
    if ($this->_batch === null || !$this->each || $this->each && next($this->_batch) === false) {
        $this->_batch = $this->fetchData();
        reset($this->_batch);
    }
    if ($this->each) {
        $this->_value = current($this->_batch);
        if ($this->query->indexBy !== null) {
            $this->_key = key($this->_batch);
        } elseif (key($this->_batch) !== null) {
            $this->_key = $this->_key === null ? 0 : $this->_key + 1;
        } else {
            $this->_key = null;
        }
    } else {
        $this->_value = $this->_batch;
        $this->_key = $this->_key === null ? 0 : $this->_key + 1;
    }
}

            
reset() public method

Resets the batch query.

This method will clean up the existing batch query so that a new batch query can be performed.

public void reset ( )

                #[\ReturnTypeWillChange]
public function reset()
{
    $this->_iterator = null;
    $this->_batch = null;
    $this->_value = null;
    $this->_key = null;
}

            
rewind() public method

Resets the iterator to the initial state.

This method is required by the interface Iterator.

public void rewind ( )

                #[\ReturnTypeWillChange]
public function rewind()
{
    $this->reset();
    $this->next();
}

            
valid() public method

Returns whether there is a valid dataset at the current position.

This method is required by the interface Iterator.

public boolean valid ( )
return boolean

Whether there is a valid dataset at the current position.

                public function valid(): bool
{
    return !empty($this->_batch);
}