/** * 分离isset结构中的类型 * isset($id) ? $_GET['id'] : 2; * 转为: * array($_GET[id],2) * @param unknown $node */ public function setItemByNode($node) { //处理三元表达式 if ($node->getType() == "Expr_Ternary") { if ($node->if->getType() == "Expr_Ternary") { $this->setItemByNode($node->if); } if ($node->else->getType() == "Expr_Ternary") { $this->setItemByNode($node->else); } $if_node = SymbolUtils::getSymbolByNode($node->if); $else_node = SymbolUtils::getSymbolByNode($node->else); $if_node && $this->addSymbol($if_node); $else_node && $this->addSymbol($else_node); } else { return; } }
/** * 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; }