public function testGetData() { $record = $this->authitemchilds('authitemchild_1'); $admin = $this->authitems('admin'); $_GET['with'] = 'parent, child'; $relationProvider = new ApiRelationProvider(array("config" => array('parent' => array('relationName' => 'parent0', 'columnName' => 'parentColumn'), 'child' => array('relationName' => 'child0', 'return' => 'object')))); $relationData = $relationProvider->getData($record); $this->assertTrue(is_array($relationData)); $this->assertArrayHasKey('parentColumn', $relationData); $this->assertArrayHasKey('name', $relationData['parentColumn']); $this->assertArrayHasKey('description', $relationData['parentColumn']); $this->assertArrayHasKey('bizrule', $relationData['parentColumn']); $this->assertArrayHasKey('child', $relationData); $this->assertInstanceOf('CActiveRecord', $relationData['child']); $_GET['with'] = 'chidrens'; $relationProvider = new ApiRelationProvider(array("config" => array('chidrens' => array('relationName' => 'authItemChildren', 'columnName' => 'chidrens', 'return' => 'array')))); $relationData = $relationProvider->getData($admin); $this->assertTrue(is_array($relationData)); $this->assertArrayHasKey('chidrens', $relationData); $this->assertEquals(count($relationData['chidrens']), count($admin->authItemChildren)); }
/** * Function send response with list of record attributes or empty array if no record found. * * @param boolean $sendToEndUser Whether the response should be sent to the end user or should be returned as an array. * @return array result. Null if the result sended to end user. */ public function getList($sendToEndUser = null) { if (is_bool($sendToEndUser)) { $this->sendToEndUser = $sendToEndUser; } $this->checkModel(); $this->criteria = new CDbCriteria($this->getFinalCriteriaParams()); try { $relationData = new ApiRelationProvider(array('config' => $this->getRelations(), 'model' => $this->model)); } catch (CException $e) { $result = array('error' => array($e->getMessage())); $this->statusCode = 400; return $this->returnResult($result); } $this->criteria->with = $relationData->getRelationsList(); if (is_array($this->criteria->with) && !empty($this->criteria->with)) { $this->criteria->together = true; } $this->criteria->mergeWith($this->getFilterCriteria(), 'OR'); $this->criteria->mergeWith($this->getSearchCriteria(), 'OR'); $this->criteria->mergeWith($this->baseCriteria, 'AND'); try { $records = $this->model->findAll($this->criteria); $result = array(); foreach ($records as $record) { $result[] = array_merge($record->attributes, $relationData->getData($record)); } } catch (Exception $ex) { $message = property_exists($ex, 'errorInfo') ? $ex->errorInfo : $ex->getMessage(); $result = array("error" => $message); $this->statusCode = 400; } return $this->returnResult($result, $this->statusCode == 200 ? array($this->getContentRangeHeader()) : array()); }