рдирдорд╕реНрддреЗ,
рд╣рдо рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреАрдорд╛ рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЯреЗрдмрд▓ рдЬреЙрдЗрди рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕реНрдХреАрдорд╛ рдПрдХ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рднреАрддрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рддрд╛рд░реНрдХрд┐рдХ рдкреГрдердХреНрдХрд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд▓рд╛рдн рд╣реИред
рдЕрдВрддрд┐рдо рд╢рдХреНрддрд┐ред
@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" рдХреЛ рдЪреБрдиреЗрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕рд┐рдВрдЯреЗрдХреНрд╕, рдпрд╛рдиреА, рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд╛рдо, рд╕реНрддрдВрдн рдирд╛рдо, рдореЗрдВ рд╕реНрдХреАрдорд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк schemaName.tableName рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреНрд╡реЗрд░реА рдЧрд▓рдд рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЗрд╕рдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп
.withSchema('schemaName')
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛редрд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐
.withSchema
рдкреВрд░реЗ рдмрд┐рд▓реНрдбрд░ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдХреАрдорд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИредрдЕрдм рддрдХ, рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╕реНрдерд╛рдпреА рд╕реЙрд▓реНрдпреВрдЯрд┐рди рд╣реИрдВ:
рд╕реНрдкрд╛рдЗрд╕рд░ рдХреНрд╡реЗрд░реА рдореЗрдВ
.withSchema
рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдирд╛рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕реНрдХреАрдорд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВредрдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╣реИред
.withSchema
рдХреЗ рд╕рд╛рде рдЙрдк-рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЗрд╕ рддрд░рд╣ рдЙрдк рдХреНрд╡реЗрд░реА рдореЗрдВ
.as
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред.joinRaw()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ.raw()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдпрд╣ knex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд▓рд╛рдн рд╣реИред
рдЕрдВрддрд┐рдо рд╢рдХреНрддрд┐ред