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.
document
Un 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.
Une collection d'objets, 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 vous utilisez 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