/**
  * Properly loads an associative array of properties into the object
  * - decrypts ides
  * - creates objects
  * @param   array   $array
  * @return  Model   $this
  * @throws  \InvalidArgumentException if non associative array
  */
 public function loadArray($array = array())
 {
     $array = $array ?: $_POST;
     if (!$array) {
         return $this;
     }
     if (!\is_assoc($array)) {
         throw new \InvalidArgumentException('
             loadArray() expects an associative array argument');
     }
     foreach ($array as $k => $v) {
         if ($this->isObjectParam($k)) {
             $obj = $this->getActualObjectName($k);
             \aql::include_class_by_name($obj);
             $loader = function ($var) use($obj) {
                 if (!is_array($var)) {
                     return $var;
                 }
                 $tmp = class_exists($obj) ? new $obj() : new Model(null, $obj);
                 return $tmp->loadArray($var);
             };
             $v = $this->isPluralObject($k) ? array_map($loader, $v) : $loader($v);
         }
         $this->{$k} = $v;
     }
     return $this;
 }