setDocument(Yii::$app->arango->getDocument(static::class_to_collection(get_called_class()), $id)) ->setIsNewRecord(false); return $model; } /** * @todo функция должна возвращать true/false в зависимости от результата * Но аранга возвращает различный тип данных. Надо написать код * */ public function save() { if ($this->_isNewRecord) { // добавляем запись $this->_doc = Document::createFromArray($this->getAttributes()); $result = intval(Yii::$app->arango->documentHandler()->add(static::class_to_collection(get_called_class()), $this->_doc)) > 0; if ($result) { $this->_isNewRecord = false; } return $result; } else { // патчим! $doc_attributes = array_keys($this->_doc->getAll()); $attributes = $this->getAttributes(); foreach ($attributes as $k=>$v) { $this->_doc->set($k, $v); unset($doc_attributes[$k]); } foreach ($doc_attributes as $key) { if ($key != '_key') unset($this->_doc->$key); } return Yii::$app->arango->documentHandler()->update($this->_doc); } } private static function class_to_collection($class) { $parts = explode("\\", $class); return end($parts); } private static function id_to_int($class) { $parts = explode("/", $class); return end($parts); } public function setIsNewRecord($state) { $this->_isNewRecord = $state; return $this; } public function setDocument($doc) { $this->_doc = $doc; $all = $this->_doc->getAll(); $this->_id = $this->_doc->getInternalId(); $this->setAttributes($all, false); return $this; } public function delete() { Yii::$app->arango->documentHandler()->deleteById( static::class_to_collection(get_called_class()), static::id_to_int($this->_doc->getInternalId()) ); } }