2017-12-27 4 views
0
`let add_query = ".andWhere('company_name', 'like','%marker%')"; 
knex('franchisee').where('franchisee_name', 'like', '%jackmarker%')${add_query} 
.then((resp) => { 
    console.log("resp >>",resp) 
})` 

Höre ich möchte wie Abfrage mit Knex NPM in Knoten js ausführen. Ich nehme die Variable add_query mit dieser Variable wollen knoe Abfrage dynamisch machen.Knex wie Abfrage dynamisch hinzufügen

Like this query-

`knex('franchisee').where('franchisee_name', 'like','%jackmarker%').andWhere('company_name', 'like','%marker%') 
.then((resp) => { 
    console.log("resp >>",resp) 
})` 

Antwort

1

Sie können Teile von Abfragen wie folgt hinzu:

const getResults = (options) => { 
    let query = knex('table'); 
    if (options.where) { 
     query = query.where('franchisee_name', 'like', '%jackmarker%'); 
    } 

    if (options.other) { 
     query = query.where('company', 'like', '%marker%'); 
    } 

    return query.select(); 
}; 

Sie können auch roh Abfragen wie folgt verwendet werden:

const getVehiclePolicies = (options) => { 
    return P.try(() => { 
     const queries = [ 
      ` 
       SELECT 
        vp.id AS vehicle_policy_id, 
        vp.policy_id, 
        vp.policy_number, 
        vp.status, 
        vp.service_count, 
        vp.manufacturer, 
        vp.model, 
        vp.variant, 
        vp.colour, 
        vp.year, 
        vp.policy_owner, 
        vp.policy_owner_email, 
        vp.policy_owner_phone, 
        vp.policy_owner_country_code, 
        vp.vin_number, 
        vp.engine_number, 
        vp.vehicle_type, 
        vp.start_date, 
        vp.end_date, 
        vp.expired, 
        vp.created_at, 
        vp.updated_at 
       FROM vehicles AS v 
        INNER JOIN vehicle_policies AS vp ON v.registration_number = vp.vehicle_id 
        INNER JOIN company_policies AS cp ON cp.id = vp.policy_id 
       WHERE 
        NOT v.deleted 
        AND NOT vp.deleted 
        AND NOT cp.deleted    
      ` 
     ]; 

     const bindings = []; 

     if (options.vehicle_id) { 
      queries.push('AND vp.vehicle_id = ?'); 
      bindings.push(options.vehicle_id); 
     } 

     if (options.policy_number) { 
      queries.push('AND vp.policy_number = ?'); 
      bindings.push(options.policy_number); 
     } 

     if (options.vehicle_policy_id) { 
      queries.push('AND vp.id = ?'); 
      bindings.push(options.vehicle_policy_id); 
     } 

     if (options.default_policy) { 
      queries.push('AND cp.default_policy'); 
     } 

     queries.push(`LIMIT ? OFFSET ?`); 
     bindings.push(options.limit || 15); 
     bindings.push(options.offset || 0); 

     return db.raw(queries.join(' '), bindings); 
    }).then((data) => { 
     debug('GET VEHICLE POLICIES DATA'); 
     debug(data.rows); 

     return data.rows; 
    }); 
}; 
-3

Mit eval () lösen Sie dieses Problem.

let add_query = ".andWhere('company_name', 'like','%marker%')"; eval("knex('franchisee').where('franchisee_name', 'like', '%jackmarker%')"+add_query) .then((resp) => { console.log("resp >>",resp) })

+1

'eval' wird nicht empfohlen. Es gibt ein Sicherheitsproblem. –