/**
  * Expands any relational properties within a result.
  *
  * @param array $model
  * @param array $result
  * @param array $namedExc
  * @param array $namedInc
  * @param array $namedExp
  *
  * @return array
  */
 private function expand(Model $model, array $result, array $namedExc, array $namedInc, array $namedExp)
 {
     foreach ($namedExp as $k => $subExp) {
         $value = array_value($result, $k);
         if (!$this->isExpandable($model, $k, $value)) {
             continue;
         }
         $subExc = array_value($namedExc, $k);
         $subInc = array_value($namedInc, $k);
         // convert exclude, include, and expand into dot notation
         // then take the keys for a flattened dot notation
         $flatExc = is_array($subExc) ? array_keys(array_dot($subExc)) : [];
         $flatInc = is_array($subInc) ? array_keys(array_dot($subInc)) : [];
         $flatExp = is_array($subExp) ? array_keys(array_dot($subExp)) : [];
         $relation = $model->relation($k);
         $serializer = new self($this->request);
         $serializer->setExclude($flatExc)->setInclude($flatInc)->setExpand($flatExp);
         if ($relation instanceof Model) {
             $result[$k] = $serializer->toArray($relation);
         } else {
             $result[$k] = $relation;
         }
     }
     return $result;
 }