Knex: рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреАрдорд╛ рдореЗрдВ рджреЛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ (рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдЬреБрд▓ре░ 2016  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: knex/knex

рдирдорд╕реНрддреЗ,
рд╣рдо рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреАрдорд╛ рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЯреЗрдмрд▓ рдЬреЙрдЗрди рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕реНрдХреАрдорд╛ рдПрдХ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рднреАрддрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рддрд╛рд░реНрдХрд┐рдХ рдкреГрдердХреНрдХрд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП SQL рдХреНрд╡реЗрд░реА рд▓рд┐рдЦрддреЗ рд╕рдордп рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреАрдорд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

select * 
from user_schema.users as users
inner join account_schema.accounts  as accounts
on users.users.id = accounts.user_id

рдореИрдВ рд╢рд╛рдпрдж kenx.js рдХреЗ рдиреАрдЪреЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ?

knex.from('user_schema.users as users').innerJoin('account_schema.accounts as accounts', 
'users.id', 'accounts.user_id')

рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВрдиреЗ рджреЗрдЦрд╛ред withSchema рд╡рд┐рдХрд▓реНрдк knex.js рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдирд╛рдо рдХреЛ рд╕реНрдХреАрдорд╛ рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдлрд╛рдпрджрд╛ рд╣реИред рдореИрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреАрдорд╛рдУрдВ рд╕реЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП .withSchema рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

Knex.js Documentation 
------------------------
.withSchema([schemaName]) 
Specifies the schema to be used as prefix of table name.

knex.withSchema('public').select('*').from('users')

Outputs:
select * from `public`.`users`

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕рд┐рдВрдЯреЗрдХреНрд╕, рдпрд╛рдиреА, рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд╛рдо, рд╕реНрддрдВрдн рдирд╛рдо, рдореЗрдВ рд╕реНрдХреАрдорд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк schemaName.tableName рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреНрд╡реЗрд░реА рдЧрд▓рдд рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЗрд╕рдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп .withSchema('schemaName') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред

рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ .withSchema рдкреВрд░реЗ рдмрд┐рд▓реНрдбрд░ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдХреАрдорд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдм рддрдХ, рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╕реНрдерд╛рдпреА рд╕реЙрд▓реНрдпреВрдЯрд┐рди рд╣реИрдВ:

  • рд╕реНрдкрд╛рдЗрд╕рд░ рдХреНрд╡реЗрд░реА рдореЗрдВ .withSchema рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдирд╛рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕реНрдХреАрдорд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред
    рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╣реИред

  • .withSchema рдХреЗ рд╕рд╛рде рдЙрдк-рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

    {
        let rows = await knex.withSchema("sandbox1")
            .select('first_name', 'last_name', 'phone', 'site', "sites.name as sname")
            .from('users')
            .leftJoin(
                knex.withSchema('public')
                    .table('sites')
                    .select()
                    .as("sites"),
                "sites.id",
                "users.site")
        console.log(rows)
    }

рдЗрд╕ рддрд░рд╣ рдЙрдк рдХреНрд╡реЗрд░реА рдореЗрдВ .as рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

  • .joinRaw() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
    {
        let queryBuilder = knex.withSchema("sandbox1")
            .select('first_name', 'last_name', 'phone', 'site', "sites.name as sname")
            .from('users')
            .joinRaw("left join public.sites as sites ON sites.id = users.site", [])
        let sql = queryBuilder.toSQL().toNative()
        let rows = await queryBuilder

        console.log((sql))
        console.log(rows)
    }
  • .raw() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
    {
        let { rows ,rowCount } = await knex
            .raw('SELECT users.first_name, users.last_name, users.phone, users.site, sites.name as sname FROM sandbox1.users, public.sites WHERE sites.id = users.site;');

        console.log(rows)
    }

рдпрд╣ knex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд▓рд╛рдн рд╣реИред

  • рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рдУрдЖрд░рдПрдо рдпрд╛ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред

рдЕрдВрддрд┐рдо рд╢рдХреНрддрд┐ред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди?

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕рд┐рдВрдЯреЗрдХреНрд╕, рдпрд╛рдиреА, рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд╛рдо, рд╕реНрддрдВрдн рдирд╛рдо, рдореЗрдВ рд╕реНрдХреАрдорд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк schemaName.tableName рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреНрд╡реЗрд░реА рдЧрд▓рдд рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЗрд╕рдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп .withSchema('schemaName') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред

рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ .withSchema рдкреВрд░реЗ рдмрд┐рд▓реНрдбрд░ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдХреАрдорд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдм рддрдХ, рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╕реНрдерд╛рдпреА рд╕реЙрд▓реНрдпреВрдЯрд┐рди рд╣реИрдВ:

  • рд╕реНрдкрд╛рдЗрд╕рд░ рдХреНрд╡реЗрд░реА рдореЗрдВ .withSchema рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдирд╛рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕реНрдХреАрдорд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред
    рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╣реИред

  • .withSchema рдХреЗ рд╕рд╛рде рдЙрдк-рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

    {
        let rows = await knex.withSchema("sandbox1")
            .select('first_name', 'last_name', 'phone', 'site', "sites.name as sname")
            .from('users')
            .leftJoin(
                knex.withSchema('public')
                    .table('sites')
                    .select()
                    .as("sites"),
                "sites.id",
                "users.site")
        console.log(rows)
    }

рдЗрд╕ рддрд░рд╣ рдЙрдк рдХреНрд╡реЗрд░реА рдореЗрдВ .as рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

  • .joinRaw() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
    {
        let queryBuilder = knex.withSchema("sandbox1")
            .select('first_name', 'last_name', 'phone', 'site', "sites.name as sname")
            .from('users')
            .joinRaw("left join public.sites as sites ON sites.id = users.site", [])
        let sql = queryBuilder.toSQL().toNative()
        let rows = await queryBuilder

        console.log((sql))
        console.log(rows)
    }
  • .raw() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
    {
        let { rows ,rowCount } = await knex
            .raw('SELECT users.first_name, users.last_name, users.phone, users.site, sites.name as sname FROM sandbox1.users, public.sites WHERE sites.id = users.site;');

        console.log(rows)
    }

рдпрд╣ knex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд▓рд╛рдн рд╣реИред

  • рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рдУрдЖрд░рдПрдо рдпрд╛ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред

рдЕрдВрддрд┐рдо рд╢рдХреНрддрд┐ред

@codinggirl рдХреЗ рдЙрддреНрддрд░ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝рдирд╛:

joinRaw() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрд╛рдВрдз рд╕рдХрддреЗ рд╣реИрдВред рдЬреЛ рдкреВрд░реА рдХреНрд╡реЗрд░реА рдореЗрдВ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрд╡реЗрд░реА рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред

    {
        const queryBuilder = knex.withSchema("sandbox1")
            .select('first_name', 'last_name', 'phone', 'site', "sites.name as sname")
            .from('users')
            .joinRaw("left join ?? ON ?? = ??", ["public.sites", "sites.id", "users.site"])
        const sql = queryBuilder.toString()
        console.log(sql)
    }

рдиреЛрдЯ: рд╕реНрдерд┐рддреАрдп рдмрд╛рдЗрдВрдбрд┐рдВрдЧ? рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ ?? рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рдкреАрдЬреА рдкрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ:
"first_name", "last_name", "рдлрд╝реЛрди", "рд╕рд╛рдЗрдЯ", "рд╕рд╛рдЗрдЯреНрд╕" рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред "рдЖрдИрдбреА" = "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛"ред "рд╕рд╛рдЗрдЯ"

MSSQL рдкрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ:
[рд╕реИрдВрдбрдмреЙрдХреНрд╕ 1] рд╕реЗ [рдлрд░реНрд╕реНрдЯ_рдирд╛рдо], [last_name], [рдлрд╝реЛрди], [рд╕рд╛рдЗрдЯ], [рд╕рд╛рдЗрдЯреНрд╕] [рдирд╛рдо] рдХреЛ [sname] рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдиреЗрдВред [рдЖрдИрдбреА] = [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛]ред [рд╕рд╛рдЗрдЯ]

рдЗрд╕ рдмреАрдЪ, рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рд╣рдореЗрд╢рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛:
"first_name", "last_name", "phone", "site", "sites" рдХреЛ рдЪреБрдиреЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕