# Class yii\mongodb\ClientSession

Inheritance | yii\mongodb\ClientSession » yii\base\BaseObject
Implements | yii\base\Configurable
Source Code | https://github.com/yiisoft/yii2-mongodb/blob/master/ClientSession.php

ClientSession represents a client session and Commands, queries, and write operations may then be associated the session.

See also:

- https://docs.mongodb.com/manual/release-notes/3.6/#client-sessions Note : The minimum supported version of mongodb php driver is 1.4.0 Note : The minimum supported version of MongoDB server is 3.6.
- https://github.com/mongodb/mongo-php-driver/releases/tag/1.4.0
- https://docs.mongodb.com/ecosystem/drivers/php/#mongodb-compatibility

## Public Properties

Hide inherited properties

Property | Type | Description | Defined By
--- | --- | --- | ---
$db | yii\mongodb\Connection | The database connection that this transaction is associated with. | yii\mongodb\ClientSession
$id | string |  | yii\mongodb\ClientSession
$inTransaction | boolean |  | yii\mongodb\ClientSession
$mongoSession | \yii\mongodb\MongoDB\Driver\Session | Class represents a client session and Commands, queries, and write operations may then be associated the session. | yii\mongodb\ClientSession
$transaction | yii\mongodb\Transaction | Returns current transaction. | yii\mongodb\ClientSession

## Public Methods

Hide inherited methods

Method | Description | Defined By
--- | --- | ---
__call() | Calls the named method which is not a class method. | yii\base\BaseObject
__construct() | Constructor. | yii\base\BaseObject
__get() | Returns the value of an object property. | yii\base\BaseObject
__isset() | Checks if a property is set, i.e. defined and not null. | yii\base\BaseObject
__set() | Sets value of an object property. | yii\base\BaseObject
__unset() | Sets an object property to null. | yii\base\BaseObject
canGetProperty() | Returns a value indicating whether a property can be read. | yii\base\BaseObject
canSetProperty() | Returns a value indicating whether a property can be set. | yii\base\BaseObject
className() | Returns the fully qualified name of this class. | yii\base\BaseObject
end() | Ends the current session. | yii\mongodb\ClientSession
getId() | Returns the logical session ID as string for this session, which may be used to identify this session's operations on the server. | yii\mongodb\ClientSession
getInTransaction() | Returns true if the transaction is in progress | yii\mongodb\ClientSession
getTransaction() | Gets a current transaction of session or creates a new transaction once | yii\mongodb\ClientSession
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\BaseObject
hasProperty() | Returns a value indicating whether a property is defined. | yii\base\BaseObject
init() | Initializes the object. | yii\base\BaseObject
prepareOptions() | Prepares options for some purposes | yii\mongodb\ClientSession
start() | Starts a new mongodb session in a connection. | yii\mongodb\ClientSession

## Property Details

Hide inherited properties

$db public property

The database connection that this transaction is associated with.

public yii\mongodb\Connection $db = null
$id public property
public string $id = null
$inTransaction public property
public boolean $inTransaction = null
$mongoSession public property

Class represents a client session and Commands, queries, and write operations may then be associated the session.

See also https://www.php.net/manual/en/class.mongodb-driver-session.php.

public \yii\mongodb\MongoDB\Driver\Session $mongoSession = null
$transaction public property

Returns current transaction.

public yii\mongodb\Transaction $transaction = null

## Method Details

Hide inherited methods

__call() public method

Defined in: yii\base\BaseObject::__call()

Calls the named method which is not a class method.

Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked.

public mixed __call ( $name, $params )
$name | string | The method name
$params | array | Method parameters
return | mixed | The method return value
throws | yii\base\UnknownMethodException | when calling unknown method

Source code

                    public function __call($name, $params)
    {
        throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
    }

__construct() public method

Defined in: yii\base\BaseObject::__construct()

Constructor.

The default implementation does two things:

- Initializes the object with the given configuration `$config`.
- Call init().

If this method is overridden in a child class, it is recommended that

- the last parameter of the constructor is a configuration array, like `$config` here.
- call the parent implementation at the end of the constructor.

public void __construct ( $config = [] )
$config | array | Name-value pairs that will be used to initialize the object properties

Source code

                    public function __construct($config = [])
    {
        if (!empty($config)) {
            Yii::configure($this, $config);
        }
        $this->init();
    }

__get() public method

Defined in: yii\base\BaseObject::__get()

Returns the value of an object property.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing `$value = $object->property;`.

See also __set().

public mixed __get ( $name )
$name | string | The property name
return | mixed | The property value
throws | yii\base\UnknownPropertyException | if the property is not defined
throws | yii\base\InvalidCallException | if the property is write-only

Source code

                    public function __get($name)
    {
        $getter = 'get' . $name;
        if (method_exists($this, $getter)) {
            return $this->$getter();
        } elseif (method_exists($this, 'set' . $name)) {
            throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
        }
        throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
    }

__isset() public method

Defined in: yii\base\BaseObject::__isset()

Checks if a property is set, i.e. defined and not null.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing `isset($object->property)`.

Note that if the property is not defined, false will be returned.

See also https://www.php.net/manual/en/function.isset.php.

public boolean __isset ( $name )
$name | string | The property name or the event name
return | boolean | Whether the named property is set (not null).

Source code

                    public function __isset($name)
    {
        $getter = 'get' . $name;
        if (method_exists($this, $getter)) {
            return $this->$getter() !== null;
        }
        return false;
    }

__set() public method

Defined in: yii\base\BaseObject::__set()

Sets value of an object property.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing `$object->property = $value;`.

See also __get().

public void __set ( $name, $value )
$name | string | The property name or the event name
$value | mixed | The property value
throws | yii\base\UnknownPropertyException | if the property is not defined
throws | yii\base\InvalidCallException | if the property is read-only

Source code

                    public function __set($name, $value)
    {
        $setter = 'set' . $name;
        if (method_exists($this, $setter)) {
            $this->$setter($value);
        } elseif (method_exists($this, 'get' . $name)) {
            throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
        } else {
            throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
        }
    }

__unset() public method

Defined in: yii\base\BaseObject::__unset()

Sets an object property to null.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing `unset($object->property)`.

Note that if the property is not defined, this method will do nothing. If the property is read-only, it will throw an exception.

See also https://www.php.net/manual/en/function.unset.php.

public void __unset ( $name )
$name | string | The property name
throws | yii\base\InvalidCallException | if the property is read only.

Source code

                    public function __unset($name)
    {
        $setter = 'set' . $name;
        if (method_exists($this, $setter)) {
            $this->$setter(null);
        } elseif (method_exists($this, 'get' . $name)) {
            throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
        }
    }

canGetProperty() public method

Defined in: yii\base\BaseObject::canGetProperty()

Returns a value indicating whether a property can be read.

A property is readable if:

- the class has a getter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when `$checkVars` is true);

See also canSetProperty().

public boolean canGetProperty ( $name, $checkVars = true )
$name | string | The property name
$checkVars | boolean | Whether to treat member variables as properties
return | boolean | Whether the property can be read

Source code

                    public function canGetProperty($name, $checkVars = true)
    {
        return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
    }

canSetProperty() public method

Defined in: yii\base\BaseObject::canSetProperty()

Returns a value indicating whether a property can be set.

A property is writable if:

- the class has a setter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when `$checkVars` is true);

See also canGetProperty().

public boolean canSetProperty ( $name, $checkVars = true )
$name | string | The property name
$checkVars | boolean | Whether to treat member variables as properties
return | boolean | Whether the property can be written

Source code

                    public function canSetProperty($name, $checkVars = true)
    {
        return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
    }

className() public static method
Deprecated since 2.0.14. On PHP >=5.5, use `::class` instead.

Defined in: yii\base\BaseObject::className()

Returns the fully qualified name of this class.

public static string className ( )
return | string | The fully qualified name of this class.

Source code

                    public static function className()
    {
        return get_called_class();
    }

end() public method

Ends the current session.

public void end ( )

Source code

                    public function end()
    {
        $this->mongoSession->endSession();
        $this->db->trigger(Connection::EVENT_END_SESSION);
    }

getId() public method

Returns the logical session ID as string for this session, which may be used to identify this session's operations on the server.

See also https://www.php.net/manual/en/mongodb-driver-session.getlogicalsessionid.php.

public string getId ( )

Source code

                    public function getId()
    {
        return $this->mongoSession->getLogicalSessionId()->id->jsonSerialize()['$binary'];
    }

getInTransaction() public method

Returns true if the transaction is in progress

public boolean getInTransaction ( )

Source code

                    public function getInTransaction()
    {
        return $this->mongoSession->isInTransaction();
    }

getTransaction() public method

Gets a current transaction of session or creates a new transaction once

public yii\mongodb\Transaction getTransaction ( )
return | yii\mongodb\Transaction | Returns current transaction

Source code

                    public function getTransaction()
    {
        if ($this->_transaction === null) {
            return $this->_transaction = new Transaction(['clientSession' => $this]);
        }
        return $this->_transaction;
    }

hasMethod() public method

Defined in: yii\base\BaseObject::hasMethod()

Returns a value indicating whether a method is defined.

The default implementation is a call to php function `method_exists()`. You may override this method when you implemented the php magic method `__call()`.

public boolean hasMethod ( $name )
$name | string | The method name
return | boolean | Whether the method is defined

Source code

                    public function hasMethod($name)
    {
        return method_exists($this, $name);
    }

hasProperty() public method

Defined in: yii\base\BaseObject::hasProperty()

Returns a value indicating whether a property is defined.

A property is defined if:

- the class has a getter or setter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when `$checkVars` is true);

See also:

- canGetProperty()
- canSetProperty()

public boolean hasProperty ( $name, $checkVars = true )
$name | string | The property name
$checkVars | boolean | Whether to treat member variables as properties
return | boolean | Whether the property is defined

Source code

                    public function hasProperty($name, $checkVars = true)
    {
        return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
    }

init() public method

Defined in: yii\base\BaseObject::init()

Initializes the object.

This method is invoked at the end of the constructor after the object is initialized with the given configuration.

public void init ( )

Source code

                    public function init()
    {
    }

prepareOptions() public static method

Prepares options for some purposes

public static void prepareOptions ( &$options )
$options |  |

Source code

                    public static function prepareOptions(&$options)
    {
        if (array_key_exists('defaultTransactionOptions', $options)) {
            //convert readConcern
            if (
                array_key_exists('readConcern', $options['defaultTransactionOptions']) &&
                is_string($options['defaultTransactionOptions']['readConcern'])
            ) {
                $options['defaultTransactionOptions']['readConcern'] = new ReadConcern($options['defaultTransactionOptions']['readConcern']);
            }
            //convert writeConcern
            if (array_key_exists('writeConcern',$options['defaultTransactionOptions'])) {
                if (
                    is_string($options['defaultTransactionOptions']['writeConcern']) ||
                    is_int($options['defaultTransactionOptions']['writeConcern'])
                ) {
                    $options['defaultTransactionOptions']['writeConcern'] = new WriteConcern($options['defaultTransactionOptions']['writeConcern']);
                } elseif (is_array($options['defaultTransactionOptions']['writeConcern'])) {
                    $options['defaultTransactionOptions']['writeConcern'] =
                        (new \ReflectionClass('\MongoDB\Driver\WriteConcern'))
                            ->newInstanceArgs(
                                $options['defaultTransactionOptions']['writeConcern']
                            )
                    ;
                }
            }
            //Convert readPreference
            if (array_key_exists('readPreference',$options['defaultTransactionOptions'])) {
                if (is_string($options['defaultTransactionOptions']['readPreference'])) {
                    $options['defaultTransactionOptions']['readPreference'] = new ReadPreference($options['defaultTransactionOptions']['readPreference']);
                } else if(is_array($options['defaultTransactionOptions']['readPreference'])) {
                    $options['defaultTransactionOptions']['readPreference'] =
                        (new \ReflectionClass('\MongoDB\Driver\ReadPreference'))
                            ->newInstanceArgs(
                                $options['defaultTransactionOptions']['readPreference']
                            )
                    ;
                }
            }
        }
    }

start() public static method

Starts a new mongodb session in a connection.

public static yii\mongodb\ClientSession start ( $db, $sessionOptions = [] )
$db | yii\mongodb\Connection |
$sessionOptions | array | Creates a ClientSession for the given options {@see https://www.php.net/manual/en/mongodb-driver-manager.startsession.php#refsect1-mongodb-driver-manager.startsession-parameters}
return | yii\mongodb\ClientSession | Returns new session base on a session options for the given connection

Source code

                    public static function start($db, $sessionOptions = [])
    {
        self::prepareOptions($sessionOptions);
        if ($db->enableProfiling) {
            Yii::debug('Starting mongodb session ...', __METHOD__);
        }
        $db->trigger(Connection::EVENT_START_SESSION);
        $newSession = new self([
            'db' => $db,
            'mongoSession' => $db->manager->startSession($sessionOptions),
        ]);
        if ($db->enableProfiling) {
            Yii::debug('MongoDB session started.', __METHOD__);
        }
        return $newSession;
    }