/** * save a document to a collection * * This will add the document to the collection and return the document's id * * This will throw if the document cannot be saved * * @throws Exception * * @param mixed $collectionId - collection id as string or number * @param mixed $document - the document to be added, can be passed as a document or an array * @param bool|array $options - optional, prior to v1.2.0 this was a boolean value for create. Since v1.0.0 it's an array of options. * <p>Options are :<br> * <li>'create' - create the collection if it does not yet exist.</li> * <li>'waitForSync' - if set to true, then all removal operations will instantly be synchronised to disk / If this is not specified, then the collection's default sync behavior will be applied.</li> * </p> * * @return mixed - id of document created * @since 1.0 */ public function save($collectionId, $document, $options = array()) { // This preserves compatibility for the old create parameter. $params = array(self::OPTION_COLLECTION => $collectionId); $params = $this->validateAndIncludeOldSingleParameterInParams($options, $params, ConnectionOptions::OPTION_CREATE); $params = $this->includeOptionsInParams($options, $params, array(ConnectionOptions::OPTION_WAIT_SYNC => $this->getConnectionOption(ConnectionOptions::OPTION_WAIT_SYNC))); if (is_array($document)) { $document = Document::createFromArray($document); } $data = $document->getAll(); $url = UrlHelper::appendParamsUrl(Urls::URL_DOCUMENT, $params); $response = $this->getConnection()->post($url, $this->json_encode_wrapper($data)); $location = $response->getLocationHeader(); if (!$location) { throw new ClientException('Did not find location header in server response'); } $json = $response->getJson(); $id = UrlHelper::getDocumentIdFromLocation($location); $document->setInternalId($json[Document::ENTRY_ID]); $document->setRevision($json[Document::ENTRY_REV]); if ($id != $document->getId()) { throw new ClientException('Got an invalid response from the server'); } $document->setIsNew(false); return $document->getId(); }
/** * Get the list of all documents' ids from a collection * * This will throw if the list cannot be fetched from the server * * @throws Exception * * @param mixed $collectionId - collection id as string or number * * @return array - ids of documents in the collection */ public function getAllIds($collectionId) { $url = UrlHelper::appendParamsUrl(Urls::URL_DOCUMENT, array(self::OPTION_COLLECTION => $collectionId)); $response = $this->getConnection()->get($url); $data = $response->getJson(); if (!isset($data[self::ENTRY_DOCUMENTS])) { throw new ClientException('Got an invalid document list from the server'); } $ids = array(); foreach ($data[self::ENTRY_DOCUMENTS] as $location) { $ids[] = UrlHelper::getDocumentIdFromLocation($location); } return $ids; }
/** * save an edge to an edge-collection * * This will save the edge to the collection and return the edges-document's id * * This will throw if the document cannot be saved * * @throws Exception * * @param mixed $collectionId - collection id as string or number * @param mixed $from - from vertex * @param mixed $to - to vertex * @param mixed $document - the edge-document to be added, can be passed as an object or an array * @param bool|array $options - optional, prior to v1.2.0 this was a boolean value for create. Since v1.0.0 it's an array of options. * <p>Options are :<br> * <li>'create' - create the collection if it does not yet exist.</li> * <li>'waitForSync' - if set to true, then all removal operations will instantly be synchronised to disk.<br> * If this is not specified, then the collection's default sync behavior will be applied.</li> * </p> * * @return mixed - id of document created * @since 1.0 */ public function saveEdge($collectionId, $from, $to, $document, $options = array()) { if ($collectionId instanceof Collection) { $collectionId = $collectionId->getName(); } if (is_array($document)) { $document = Edge::createFromArray($document); } $document->setFrom($from); $document->setTo($to); $params = array(self::OPTION_COLLECTION => $collectionId, self::OPTION_FROM => $document->getFrom(), self::OPTION_TO => $document->getTo()); $params = $this->validateAndIncludeOldSingleParameterInParams($options, $params, ConnectionOptions::OPTION_CREATE); $params = $this->includeOptionsInParams($options, $params, array(ConnectionOptions::OPTION_WAIT_SYNC => $this->getConnectionOption(ConnectionOptions::OPTION_WAIT_SYNC))); $data = $document->getAll(); $url = UrlHelper::appendParamsUrl(Urls::URL_EDGE, $params); $response = $this->getConnection()->post($url, $this->json_encode_wrapper($data)); $location = $response->getLocationHeader(); if (!$location) { throw new ClientException('Did not find location header in server response'); } $json = $response->getJson(); $id = UrlHelper::getDocumentIdFromLocation($location); $document->setInternalId($json[Edge::ENTRY_ID]); $document->setRevision($json[Edge::ENTRY_REV]); if ($id != $document->getId()) { throw new ClientException('Got an invalid response from the server'); } $document->setIsNew(false); return $document->getId(); }