Seems that (at least with MySQL 5.7.23) if you do not set an _id field in the array of items to "add", it fails with error...
[HY000] Document is missing a required field
Adding "_id" => xxxx does resolve the issue.
(No version information available, might only be in Git)
Collection::add — Добавляет документ в коллекцию
Запускает добавление данного документа (документов) в коллекцию, поддерживаются несколько вариантов метода. Возможные варианты:
Добавление одного документа в виде строки JSON.
Добавление одного документа в виде массива, например:
[ 'field' => 'value', 'field2' => 'value2' ... ]
В одну и ту же операцию можно добавить, как документ, так и несколько документов.
document
Один или несколько документов, это может быть либо JSON, либо массив полей с соответствующими значениями. Массив не может быть пустым.
Сервер MySQL автоматически генерирует уникальные значения _id
для
каждого документа (рекомендуется), хотя оно также может быть добавлено вручную. Это значение должно быть
уникальным, иначе операция добавления не будет выполнена.
Объект CollectionAdd. Используйте execute() для возврата Result, который можно использовать для запроса количества затронутых элементов, количества предупреждений, сгенерированных операцией, или для получения списка сгенерированных идентификаторов для добавленных документов.
Пример #1 Пример использования mysql_xdevapi\Collection::add()
<?php
$session = mysql_xdevapi\getSession("mysqlx://user:password@localhost");
$session->sql("DROP DATABASE IF EXISTS addressbook")->execute();
$session->sql("CREATE DATABASE addressbook")->execute();
$schema = $session->getSchema("addressbook");
$create = $schema->createCollection("people");
$collection = $schema->getCollection("people");
// Добавление двух документов
$collection->add('{"name": "Fred", "age": 21, "job": "Construction"}')->execute();
$collection->add('{"name": "Wilma", "age": 23, "job": "Teacher"}')->execute();
// Добавление двух документов используя один объект JSON
$result = $collection->add(
'{"name": "Bernie",
"jobs": [{"title":"Cat Herder","Salary":42000}, {"title":"Father","Salary":0}],
"hobbies": ["Sports","Making cupcakes"]}',
'{"name": "Jane",
"jobs": [{"title":"Scientist","Salary":18000}, {"title":"Mother","Salary":0}],
"hobbies": ["Walking","Making pies"]}')->execute();
// Получение списка сгенерированных идентификаторов последней операции add()
$ids = $result->getGeneratedIds();
print_r($ids);
?>
Вывод приведённого примера будет похож на:
Array ( [0] => 00005b6b53610000000000000056 [1] => 00005b6b53610000000000000057 )
Замечание:
MySQL Server 8.0 или выше генерирует уникальный _id, как показано в примере. Поле _id должно быть определено вручную, если используется MySQL Server 5.7.
Seems that (at least with MySQL 5.7.23) if you do not set an _id field in the array of items to "add", it fails with error...
[HY000] Document is missing a required field
Adding "_id" => xxxx does resolve the issue.
It returns a mysql_xdevapi\CollectionAdd instead of a mysql_xdevapi\Result