如何使用 join on Objection.js 解析数据
How parse data using join on Objection.js
我有两个模型:地点和用户。
我只需要显示具有 status = true
和用户的 status
的地点列表,这是真实的,地点名称与用户输入的字符串相匹配。
class Place extends Model {
static get tableName() {
return 'place';
}
static get relationMappings() {
return {
user: {
relation: Model.BelongsToOneRelation,
modelClass: User,
join: {
from: 'place.user_id',
to: user.id',
},
},
};
static get jsonSchema() {
return {
type: 'object',
required: ['name'],
properties: {
id: { type: 'integer' },
name: { type: 'string', minLength: 1, maxLength: 255 },
user_id: { type: 'integer' },
status: {type: boolean},
},
};
}
}
class User extends Model {
static get tableName() {
return 'user';
}
static get jsonSchema() {
return {
type: 'object',
required: ['name'],
properties: {
id: { type: 'integer' },
name: { type: 'string', minLength: 1, maxLength: 255 },
status: {type: boolean},
},
};
}
}
我正在尝试编写此查询:
Select palce.name user.name
from palce, user
where name like '%string%' and user.status is true and place.status is true
所以我尝试将 SQL 查询转换为 Objection.js 查询 运行 我的程序:
Place
.query()
.joinRelation('user')
.where(Place.raw('lower("name")'), 'like', '%string')
.andWhere('user.status', true)
.andWhere('place.status', true)
.then(result => {
console.log(results);
});
我试图用邮递员测试程序,但是我得到了这个错误:
{
"name": "error",
"length": 119,
"severity": "ERROR",
"code": "42703",
"position": "146",
"file": "parse_relation.c",
"line": "3183",
"routine": "errorMissingColumn"
}
当我尝试将地名变成小写时出现问题:
Place.raw('lower("name")')
那么,如何组合数据库来获取我需要的数据呢?
我用的是postgre这样的数据库。
您上面的代码确实有一些语法错误等,但在修复它们之后 (https://runkit.com/embed/5b5bu44kr79m) 似乎会产生以下 SQL 的异议,用于查询:
select "place".*
from "place"
inner join "user" as "user"
on "user"."id" = "place"."user_id"
where
lower("name") like ? and
"user"."status" = ? and
"place"."status" = ?
也许您的列名称中有错字或类似的错误(因为错误来自数据库,它找不到具有特定名称的列)?
你必须像这样写 Place.raw('lower("name")')
不带引号 :
Place.raw('lower(name)')
我有两个模型:地点和用户。
我只需要显示具有 status = true
和用户的 status
的地点列表,这是真实的,地点名称与用户输入的字符串相匹配。
class Place extends Model {
static get tableName() {
return 'place';
}
static get relationMappings() {
return {
user: {
relation: Model.BelongsToOneRelation,
modelClass: User,
join: {
from: 'place.user_id',
to: user.id',
},
},
};
static get jsonSchema() {
return {
type: 'object',
required: ['name'],
properties: {
id: { type: 'integer' },
name: { type: 'string', minLength: 1, maxLength: 255 },
user_id: { type: 'integer' },
status: {type: boolean},
},
};
}
}
class User extends Model {
static get tableName() {
return 'user';
}
static get jsonSchema() {
return {
type: 'object',
required: ['name'],
properties: {
id: { type: 'integer' },
name: { type: 'string', minLength: 1, maxLength: 255 },
status: {type: boolean},
},
};
}
}
我正在尝试编写此查询:
Select palce.name user.name
from palce, user
where name like '%string%' and user.status is true and place.status is true
所以我尝试将 SQL 查询转换为 Objection.js 查询 运行 我的程序:
Place
.query()
.joinRelation('user')
.where(Place.raw('lower("name")'), 'like', '%string')
.andWhere('user.status', true)
.andWhere('place.status', true)
.then(result => {
console.log(results);
});
我试图用邮递员测试程序,但是我得到了这个错误:
{
"name": "error",
"length": 119,
"severity": "ERROR",
"code": "42703",
"position": "146",
"file": "parse_relation.c",
"line": "3183",
"routine": "errorMissingColumn"
}
当我尝试将地名变成小写时出现问题:
Place.raw('lower("name")')
那么,如何组合数据库来获取我需要的数据呢? 我用的是postgre这样的数据库。
您上面的代码确实有一些语法错误等,但在修复它们之后 (https://runkit.com/embed/5b5bu44kr79m) 似乎会产生以下 SQL 的异议,用于查询:
select "place".*
from "place"
inner join "user" as "user"
on "user"."id" = "place"."user_id"
where
lower("name") like ? and
"user"."status" = ? and
"place"."status" = ?
也许您的列名称中有错字或类似的错误(因为错误来自数据库,它找不到具有特定名称的列)?
你必须像这样写 Place.raw('lower("name")')
不带引号 :
Place.raw('lower(name)')