/** * get the table name by passing this along to the underlying model */ public function getTableName($type = 'plural') { $property = $type . 'TableName'; if ($this->{$property} == null) { $this->model = $this->getModel(); $this->{$property} = $this->model->getTableName($type); } return $this->{$property}; }
/** * Normalize the related records so they can be added into the response object * * @param unknown $baseRecord * @param unknown $relatedRecords * @param unknown $relation * @return boolean */ protected function normalizeRelatedRecords($baseRecord, $relatedRecords, $relation) { $refType = $relation->getType(); $refModelNameSpace = $relation->getReferencedModel(); // store a copy of all related record (PKIDs) // this must be attached w/ the parent records for joining purposes $relatedRecordIds = null; $refModel = new $refModelNameSpace(); $primaryKeyName = $refModel->getPrimaryKeyName(); // save the PKID for each record returned if (count($relatedRecords) > 0) { // 1 = hasOne 0 = belongsTo 2 = hasMany switch ($refType) { // process hasOne records as well case 1: // do nothin w/ hasOne since these are auto merged into the main record break; case 0: // this doesn't seem right, why are they occasionally showing up inside an array? if (isset($relatedRecords[$primaryKeyName])) { $relatedRecordIds = $relatedRecords[$primaryKeyName]; // wrap in array so we can store multiple hasOnes from many different main records $relatedRecords = array($relatedRecords); } else { $relatedRecordIds = $relatedRecords[0][$primaryKeyName]; } break; default: $relatedRecordIds = array(); foreach ($relatedRecords as $rec) { $relatedRecordIds[] = $rec[$primaryKeyName]; } break; } } else { $relatedRecordIds = null; } // we map table names to end point resource names and vice versa // regardless of relationship, the related records are returned as part of the end point resource name $this->updateRestResponse($relation->getTableName(), $relatedRecords); // add related record ids to the baseArray // this is how JSON API suggests that you related resources // will save nothing, a single value or an array // does this only run when working with hasMany? // belongsTo and hasOne are already in place, yes? if ($relatedRecordIds !== null) { if ($refType == 2 || $refType == 4) { $suffix = '_ids'; // populate the linked property or merge in additional records // attempt to store the name similar to the table name $name = $relation->getTableName('singular'); $this->baseRecord[$name . $suffix] = $relatedRecordIds; } } return true; }