 
     var result = [T]()
 
-    for item in array {
-      do {
-        result.append(try T(item) )
-      } catch {
-        continue
-      }
-    }
+    do {
+      result = try array.map { try T($0) }
+    } catch {}
 
     return result
   }
+
+  /**
+   - Parameter name: The name of the property that you want to map
+   - Returns: A mappable object array, otherwise it throws
+   */
+  func relationsOrThrow<T : SafeMappable>(name: String) throws -> [T] {
+    guard let key = name as? Key, value = self[key],
+      array = value as? JSONArray
+      else { throw MappableError.TypeError(message: "Tried to get value for \(name) as \(T.self)") }
+
+    return try array.map { try T($0) }
+  }
 }
+

   - Parameter name: The name of the property that you want to map
   - Returns: A generic type if casting succeeds, otherwise it throws
   */
  func relation<T : Mappable>(name: String) throws -> T {
    guard let key = name as? Key,
      value = self[key],
      dictionary = value as? JSONDictionary


  /**
   - Parameter name: The name of the property that you want to map
   - Returns: A mappable object array, otherwise it throws
   */
  func relationsOrThrow<T : Mappable>(name: String) throws -> [T] {
    guard let key = name as? Key,
      value = self[key],
      array = value as? JSONArray
      else { throw MappableError.TypeError(message: "Tried to get value for \(name) as \(T.self)") }

    return array.map { T($0) }
  }

  /**
   - Parameter name: The name of the property that you want to map
   - Returns: A mappable object array, otherwise it returns nil
   */
  func relations<T : SafeMappable>(name: String) -> [T]? {
