             return AssociationStep(key: key, condition: condition, relation: transform(relation))
         }
     }
-    private var steps: [AssociationStep] // Never empty. Last is destination.
+    
+    // All steps, from pivot to destination. Never empty.
+    private var steps: [AssociationStep]
+    var keyPath: [String] { return steps.map { $0.key} }
+    
     private var destination: AssociationStep {
         get { return steps[steps.count - 1] }
         set { steps[steps.count - 1] = newValue }
     }
+    var destinationKey: String { return destination.key }
+    
     private var pivot: AssociationStep {
         get { return steps[0] }
         set { steps[0] = newValue }
     }
-    var key: String { return destination.key }
-    var keyPath: [String] { return steps.map { $0.key} }
     var pivotCondition: SQLAssociationCondition {
         return pivot.condition
     }

        result.pivot = result.pivot.mapRelation(transform)
        return result
    }

    /// Returns a new association
    func through(_ other: SQLAssociation) -> SQLAssociation {
        return SQLAssociation(steps: other.steps + steps)

    ///         let team: Team = row["custom"]
    ///     }
    var key: String {
        return sqlAssociation.destinationKey
    }
    
    /// Creates an association which selects *selection*.
