private function recurse($method, array $data = [], array $rules = [], array $messages = [])
    {
        // Make sure method is valid
        if ( ! in_array($method, ['save', 'validate'])) return false;

        // Disable validation
        $validateBeforeSave = $this->validateBeforeSave;
        $this->validateBeforeSave = false;

        // Perform action
        $result = $this->{$method}($data, $rules, $messages);

        // Check for relationships
        $relationships = $this->getRelationships();

        // Recurse into each relationship if we can
        foreach ($relationships as $name => $type)
        {
            $subresult = $this->recurseRelationship($method, $name, $type);

            // If a relationship fails, we fail
            if ( ! $subresult) $result = false;
        }

        // Reset validation
        $this->validateBeforeSave = $validateBeforeSave;

        return $result;
    }