crusttech / crust-server

Apache License 2.0
87 stars 21 forks source link

Remove all N+1 queries #67

Closed darh closed 5 years ago

darh commented 5 years ago

Avoid and optimize code like this:

func (r *role) FindByMemberID(userID uint64) ([]*types.Role, error) {
    ids := make([]uint64, 0)
    params := make([]interface{}, 0)

    sql := "SELECT DISTINCT rel_role FROM " + r.members + "  "
    sql += "WHERE rel_user = ?"
    params = append(params, userID)

    if err := r.db().Select(&ids, sql, params...); err != nil {
        return nil, err
    }

    rval := make([]*types.Role, 0)
    for _, id := range ids {
        mod, err := r.FindByID(id)
        if err != nil {
            return nil, err
        }
        rval = append(rval, mod)
    }

    return rval, nil
}
titpetric commented 5 years ago