Как получить вставленный идентификатор документа в транзакции? (ArangoDB)

Я много искал в интернете подсказки, но никак не могу найти …

public function createNew($name, $type, $restriction,$picture){
global $connection;
$trans=new Transaction($connection,array( 'collections' => array( 'write' => array( 'group_relations','groups' ),'read'=> array( 'group_relations','groups' ) ), 'waitForSync' => true ));
$trans->setAction('function(){
var db= require("@arangodb").db;
var arr=db.groups.insert({"name":"'.$name.'","type":"'.$type.'","restriction":"'.$restriction.'","picture":"'.$picture.'"}).toArray();
db.group_relations.insert({"_from":"users/'.$_SESSION['uid'].'","_to":"groups/"+arr[0]["_id"],"status":"admin"});
}');
$trans->execute();
}

это функция PHP, которая делает транзакцию. В транзакции я пытаюсь создать группу, получить ее идентификатор и вставить ее в коллекцию отношений между создателем и новой группой.

В основном, создатель группы делает администратора.

«Фатальная ошибка: Неперехваченные тригены \ ArangoDb \ ServerException: 17 db.groups.insert (…). ToArray не является функцией «.

Какие-либо решения?

0

Решение

Результат insert({...}) всегда объект. Результат insert([{...},{...},...,{...}]) всегда массив В любом случае .toArray() не помогает.

Так что если вы хотите убедиться, что у вас есть массив в качестве типа результата, пожалуйста, используйте массив insert также для отдельных записей:

var arr=db.groups.insert(
[{"name":"'.$name.'",
"type":"'.$type.'",
"restriction":"'.$restriction.'",
"picture":"'.$picture.'"}]);

Таким образом, чтобы получить идентификаторы только из ваших вкладок:

var ids = [];
db.groups.insert([{...},...,{...}]).forEach(
function(obj) {ids.push(obj._id)});
...
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector