/** * Retrieving Objects * https://parse.com/docs/rest/guide#objects-retrieving-objects * * @param $className * @param $objectId * @return mixed */ public function getById($className, $objectId) { $this->prepareClassMetadata($className); $inputs['where'] = json_decode('{"' . $this->object->getKeyName() . '":{"$eq":' . $objectId . '}}'); try { $response = $this->query($className, $inputs, true); // return single object nested of full result if (isset($response['results'][0])) { return new ParseResponse($response['results'][0]); } else { ParseHelper::throwException(105); } } catch (\Exception $ex) { return new ParseResponse($ex); } }
/** * @param $account * @param $details * @param $type * @throws \Exception */ private function validateLink($account, $details, $type) { if ($account->auth_id != $details->get('id')) { $duplicatedAccount = LinkedAccount::first(array("auth" => $type, "auth_id" => $details->get('id'))); if ($duplicatedAccount) { // todo can we merge the two users? ParseHelper::throwException(105, "this auth ID already linked with user:" . $duplicatedAccount->user_id); } } }
/** * @param $className * @param $parameters * @param null $objectId * @return ParseResponse * @throws \Exception */ public function save($className, $parameters, $objectId = null) { $values = array(); // if update, try to get the current object at first if ($objectId) { $this->object = $this->object->findOrFail($objectId); } foreach ($parameters as $key => $val) { if (in_array($key, $this->columns)) { if (is_array($val) && ($operation = array_get($val, '__op'))) { switch ($operation) { case "Increment": $val = $this->object->{$key} ? $this->object->{$key} + $val['amount'] : $val['amount']; break; case "decrement": $val = $this->object->{$key} - $val['amount']; break; case "Delete": $val = null; break; case "Batch": // $ops = $val['ops']; // foreach ($ops as $ops_key => $ops_val) { // if ($ops_val['__op'] == 'AddRelation') { // foreach ($ops_val['objects'] as $objects_key => $objects_val) { // $relation_type = $objects_val['__type']; // $relation_class_name = $objects_val['className']; // $relation_class_name = ParseHelperClass::removeUnderscoreFromClassName($relation_class_name); // to remove '_' character if founded in the name of class _User // $relation_objectId = $objects_val['objectId']; // $relation_object = ParseHelperClass::createObject($relation_class_name); // $updatedAt = ''; // // if (!$relation_object) { // return ParseHelperClass::error_message_return('105'); // } // // $object->find($objectId)->$key()->sync([$relation_objectId], false); // // $relation_data_of_object = $object::find(60)->$key()->where($relation_class_name . '_id', // '=', $relation_objectId)->get(); // // foreach ($relation_data_of_object as $relation_data) { // $updatedAt = $relation_data->pivot->createdAt; // } // } // // return array( // "updatedAt" => Carbon::parse($updatedAt)->format('Y-m-d\TH:i:s.z\Z') // ); // } // } break; } } $values[$key] = $val; } elseif (in_array($key, $this->relations)) { // } else { if ($key != "ACL") { ParseHelper::throwException('210', $key); } } } $this->object->fill($values); try { $event = $this->object->getKey() ? 'update' : 'insert'; \Event::fire("before.{$event}." . $this->object->getTable(), $this->object); $this->object->save(); //create new object // now we can attach the relations foreach ($parameters as $key => $val) { if (in_array($key, $this->relations)) { if ($operation = array_get($val, '__op')) { switch ($operation) { case "Delete": $this->object->{$key}()->delete($val); break; } } elseif ($this->object->{$key}() instanceof BelongsTo) { $this->object->{$key}()->associate($val); } elseif (!$this->object->{$key}() instanceof BelongsTo) { $this->object->{$key}()->save($val); } else { ParseHelper::throwException(105); } } } \Event::fire("after.{$event}." . $this->object->getTable(), $this->object); } catch (\Exception $ex) { ParseHelper::throwException(141, $ex->getMessage()); } }