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 â Ajoute un document Ă la collection
Déclenche l'insertion du ou des documents donnés dans la collection, et plusieurs variantes de cette méthode sont prises en charge. Les options incluent :
Ajouter un seul document sous forme de chaĂźne JSON.
Ajouter un seul document sous forme de tableau comme :
[ 'field' => 'value', 'field2' => 'value2' ... ]
Un mĂ©lange des deux, et plusieurs documents peuvent ĂȘtre ajoutĂ©s dans la mĂȘme opĂ©ration.
documentUn ou plusieurs documents, et cela peut ĂȘtre soit du JSON ou un tableau de champs avec leurs valeurs associĂ©es. Cela ne peut pas ĂȘtre un tableau vide.
Le serveur MySQL génÚre automatiquement des valeurs _id uniques pour
chaque document (recommandĂ©), bien que cela puisse Ă©galement ĂȘtre ajoutĂ© manuellement. Cette
valeur doit ĂȘtre unique, sinon l'opĂ©ration d'ajout Ă©chouera.
Un objet CollectionAdd. Utiliser execute() pour retourner un rĂ©sultat qui peut ĂȘtre utilisĂ© pour interroger le nombre d'Ă©lĂ©ments affectĂ©s, le nombre d'avertissements gĂ©nĂ©rĂ©s par l'opĂ©ration, ou pour rĂ©cupĂ©rer une liste d'identifiants gĂ©nĂ©rĂ©s pour les documents insĂ©rĂ©s.
Exemple #1 Exemple de 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");
// Ajoute deux documents
$collection->add('{"name": "Fred", "age": 21, "job": "Construction"}')->execute();
$collection->add('{"name": "Wilma", "age": 23, "job": "Teacher"}')->execute();
// Ajoute deux documents en utilisant un seul objet 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();
// RécupÚre une liste d'identifiants générés à partir du dernier add()
$ids = $result->getGeneratedIds();
print_r($ids);
?>Résultat de l'exemple ci-dessus est similaire à :
Array
(
[0] => 00005b6b53610000000000000056
[1] => 00005b6b53610000000000000057
)
Note:
Un identifiant unique _id est gĂ©nĂ©rĂ© par MySQL Server 8.0 ou supĂ©rieur, comme dĂ©montrĂ© dans l'exemple. Le champ _id doit ĂȘtre dĂ©fini manuellement si on utilise 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