/**
  * 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;
 }