code: private static function buildColumnPropertiesCache()
      {
          // Get the calling child class, ensuring that the Model class was not used!
          $class = self::getStaticChildClass();
  
          // Create an AnnotationReader and get all of the annotations on properties of this class.
          $annotations = new AnnotationReader($class);
          $properties = $annotations->getPropertyAnnotations();
  
          // Initialize a collection of column => property names.
          self::$columnPropertiesCache[$class] = [];
  
          // Loop through each property annotation...
          foreach($properties as $property)
          {
              // Skip non-annotated properties!
              if($property === [])
                  continue;
  
              // If the current property has a @ColumnNameAnnotation...
              if(array_key_exists("ColumnName", $property))
                  // THEN add the column name and property name pairing to the collection!
                  self::$columnPropertiesCache[$class][$property["ColumnName"]][] = $property["var"]["name"];
              else
                  // OTHERWISE add the property name to the collection, paired to itself!
                  self::$columnPropertiesCache[$class][$property["var"]["name"]][] = $property["var"]["name"];
          }
      }
docs: Builds a column => property cache for the calling class.
  
  @throws ModelClassException
  @throws \ReflectionException