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 — Fügt einer Sammlung Dokumente hinzu
Fügt die angegebenen Dokumente zu einer Sammlung hinzu, wobei diese Methode mehrere Varianten unterstützt. Zu den Möglichkeiten gehören:
Hinzufügen eines einzelnen Dokuments als JSON-Zeichenkette.
Hinzufügen eines einzelnen Dokuments als Array:
[ 'field' => 'value', 'field2' => 'value2' ... ]
Eine Mischung aus beidem, wobei in einer Operation auch mehrere Dokumente hinzugefügt werden können.
document
Ein oder mehrere Dokumente, wobei es sich entweder um JSON oder ein Array von Feldern mit den zugehörigen Werten handeln kann. Das Array darf nicht leer sein.
Der MySQL-Server erzeugt für jedes Dokument automatisch einen
eindeutigen _id
-Wert (empfohlen), der jedoch auch
manuell hinzugefügt werden kann. Dieser Wert darf noch nicht vorhanden
sein, weil der Vorgang sonst fehlschlägt.
Gibt ein CollectionAdd-Objekt zurück. Mittels execute() wird ein Ergebnis zurückgegeben, das verwendet werden kann, um die Anzahl der betroffenen Elemente abzufragen, die Anzahl der durch den Vorgang erzeugten Warnungen zu ermitteln oder eine Liste der erzeugten IDs für die eingefügten Dokumente zu erhalten.
Beispiel #1 mysql_xdevapi\Collection::add()-Beispiel
<?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");
// Hinzufügen zweier Dokumente
$collection->add('{"name": "Fred", "age": 21, "job": "Construction"}')->execute();
$collection->add('{"name": "Wilma", "age": 23, "job": "Teacher"}')->execute();
// Hinzufügen zweier Dokumente mit einem einzigen JSON-Objekt
$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();
// Abrufen einer Liste der beim letzten add() erzeugten IDs
$ids = $result->getGeneratedIds();
print_r($ids);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Array ( [0] => 00005b6b53610000000000000056 [1] => 00005b6b53610000000000000057 )
Hinweis:
Wie im Beispiel gezeigt, wird ab MySQL-Server 8.0 eine eindeutige _id erzeugt. Wenn MySQL 5.7 verwendet wird, muss das Feld _id manuell definiert werden.
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