我有一个看起来像这样的简单SQL查询生成器:
class QueryBuilder {
select(fields) {
this.query = "SELECT `" + fields.join("`, `") + "` ";
return this;
}
from(table) {
this.query += "FROM `" + table + "` ";
return this;
}
}
问题是它返回this
,所以我可以这样做:
const sql = builder.select("field1", "field2").from("table").select("I shouldn't be able to call select");
是否有任何方法可以从select
实例中禁用/删除Builder
函数,并在首次调用后自动完成?或者要强调第二次调用该函数将导致错误。
您可以返回特定的method
而不是this
,可以在此方法之后链式调用。
示例:
class QueryBuilder {
select(fields) {
this.query = "SELECT `" + fields.join("`, `") + "` ";
return {
from: this.from
};
}
from(table) {
this.query += "FROM `" + table + "` ";
return {
where : ""
};
}
}