Bookshelf更改列数据类型

时间:2017-03-14 20:28:07

标签: javascript mysql bookshelf.js

我正在使用bookshelf.js,我想更改数据类型列,这是我想要做的示例。

select * from table where date(datetime_col) = '2017-03-14'

datatime_col是DATETIME,我想转换为日期来执行查询。

这就是我在书架上试图做的事情

var Model =  new model().query(function (qb) {
        qb.where('date(datetime_col)', '=' , date);
    }).fetchAll()

当我尝试执行上面的代码时,这是错误

Error: ER_BAD_FIELD_ERROR: Unknown column 'date(datetime_col)' in 'where clause'

这是一个完整的示例,您如何使用knex.raw和bookshelf进行查询,感谢您的回答。

在日期时间列的两个日期之间使用

var Model =  new model().query(function (qb) {
        qb.whereBetween( Bookshelf.knex.raw("DATE(colum_datetime)"), [date_var1, date_var2]);
    }).fetchAll( { withRelated: ['table1', 'table2', {'table3':function (qb) {
        qb.orderBy('date_column', 'desc')
    }},'table4']  });

使用

var Model =  new model().query("where", Bookshelf.knex.raw("DATE(colum_datetime)"), "=", date_var).fetchAll( { withRelated: ['table1', 'teble2', {'table3':function (qb) {
    qb.orderBy('date_column', 'desc')
}},'table4']  });

1 个答案:

答案 0 :(得分:1)

看起来“bookshelf.js”或底层的“knex”期望获得模型的属性名称(如datetime_col),而不是像date(datetime_col)这样的sql片段。

根据this source,你需要传递一个带有“raw”sql函数的部分。 建议的解决方案是这样写:

model.query("where", Bookshelf.knex.raw("DATE(field) = ?"), "2017-03-04"))