Example #1
0
 /**
  * Defines: Model, key, prefix, as, asProp, skip, attributes, where, required, children.
  * @param Model $Model
  * @param array $params
  * @param null|stdClass $parent
  * @return stdClass
  */
 private function createNode(Model $Model, array $params = [], stdClass $parent = null)
 {
     $node = new stdClass();
     $node->Model = $Model;
     $node->key = $Model->getUnique();
     $node->prefix = null;
     $node->asProp = null;
     # Handle `as`:
     $node->as = null;
     if (isset($params['as'])) {
         $node->as = $params['as'];
         $node->key .= Extras::GLUE_CHAR . $params['as'];
     }
     # Handle `attributes`:
     $node->skip = [];
     $attrs = array_keys($Model->getDefinition()->getAttributes());
     # Handle timestamps:
     if ($Model->isTimestamps()) {
         $attrs[] = $Model->getCreatedAtAttr();
         $attrs[] = $Model->getUpdatedAtAttr();
     }
     # Handle attributes in options:
     if (isset($params['attributes']) && $params['attributes']) {
         $attrs = array_intersect($attrs, $params['attributes']);
     }
     if (!in_array('id', $attrs)) {
         array_unshift($attrs, 'id');
         $node->skip[] = 'id';
     }
     $node->attributes = $attrs;
     # Handle `where`:
     $node->where = isset($params['where']) ? $params['where'] : [];
     # Handle `required`:
     $node->required = isset($params['required']) ? (bool) $params['required'] : null;
     # Handle `include`:
     !$parent ?: $this->handleRelation($parent, $node);
     $this->handleChildren($node, $params);
     return $node;
 }