Datastore/src/Operation.php
public function mutation(
        $operation,
        $input,
        $type,
        $baseVersion = null
    ) {
        // If the given element is an EntityInterface, it will use that baseVersion.
        if ($input instanceof EntityInterface) {
            $baseVersion = $input->baseVersion();
            $data = $this->entityMapper->objectToRequest($input);

            if (!$input->key()) {
                throw new \InvalidArgumentException('Base entities must provide a datastore key.');
            }
        } elseif ($input instanceof Key) {
            $data = $input->keyObject();
        } else {
            throw new \InvalidArgumentException(sprintf(
                'Input must be a Key or Entity, %s given',
                get_class($input)
            ));
        }

        return array_filter([
            $operation => $data,
            'baseVersion' => $baseVersion
        ]);
    }
public function mutation(
        $operation,
        $input,
        $type,
        $baseVersion = null
    ) {
        // If the given element is an EntityInterface, it will use that baseVersion.
        if ($input instanceof EntityInterface) {
            $baseVersion = $input->baseVersion();
            $data = $this->entityMapper->objectToRequest($input);

            if (!$input->key()) {
                throw new \InvalidArgumentException('Base entities must provide a datastore key.');
            }
        } elseif ($input instanceof Key) {
            $data = $input->keyObject();
        } else {
            throw new \InvalidArgumentException(sprintf(
                'Input must be a Key or Entity, %s given',
                get_class($input)
            ));
        }

        return array_filter([
            $operation => $data,
            'baseVersion' => $baseVersion
        ]);
    }
public function mutation ( $ operation , $ input , $ type , $ baseVersion = null ) { // If the given element is an EntityInterface, it will use that baseVersion. if ( $ input instanceof EntityInterface ) { $ baseVersion = $ input -> baseVersion ( ) ; $ data = $ this -> entityMapper -> objectToRequest ( $ input ) ; if ( ! $ input -> key ( ) ) { throw new \ InvalidArgumentException ( 'Base entities must provide a datastore key.' ) ; } } elseif ( $ input instanceof Key ) { $ data = $ input -> keyObject ( ) ; } else { throw new \ InvalidArgumentException ( sprintf ( 'Input must be a Key or Entity, %s given' , get_class ( $ input ) ) ) ; } return array_filter ( [ $ operation => $ data , 'baseVersion' => $ baseVersion ] ) ; }
Enqueue a mutation

A mutation is a change to the datastore. Create, Update and Delete are
examples of mutations, while Read is not.

Google Cloud Datastore supports multiple mutations in a single API call,
subject to the limits of the service. Adding mutations separately from
committing the changes allows you to create complex operations, both
inside a transaction and not.

@see https://cloud.google.com/datastore/docs/concepts/limits Limits

@param string $operation The operation to execute. "Insert", "Upsert",
"Update" or "Delete".
@param EntityInterface|Key $input The entity or key to mutate.
@param string $type The type of the input array.
@param string $baseVersion [optional] The version of the entity that this mutation
is being applied to. If this does not match the current version on
the server, the mutation conflicts.
@return array [Mutation](https://cloud.google.com/datastore/docs/reference/rest/v1/projects/commit#Mutation).
@throws InvalidArgumentException
Enqueue a mutation