OK。多くの検索の後、私はここで答えを見つけました:
https://github.com/tgriesser/knex/issues/1240
トリックはKnexは型キャストプロパティで使用している下線のMySQLドライバを設定するには、次のとおりです。
var db = require('knex')({
client: 'mysql',
connection: {
host: 'localhost',
user: 'mysql',
password: 'mysql',
database: 'mysql',
typeCast: function(field, next) {
if (field.type == 'TINY' && field.length == 1) {
return (field.string() == '1'); // 1 = true, 0 = false
}
return next();
}
}
});
db('my_table')
.select()
.then((rows) => {
//Each row's boolean field is now true/false instead of 1/0
});
それは場合に役立ちませんので、これは完全な解決策ではないことboolean(tinyint)フィールドはNULLでもかまいません。 (キャスト関数にこのオプションを追加しようとしましたが、tinyintフィールドの結果が乱れただけでなく、何らかの理由で他のセルも混乱しました)。だから、誰かがブール値を持つNULLの場合を説明する方法を知っていれば、それは素晴らしいだろう。しかし、いずれにせよ、これはかなり良い解決策です。
EDIT
この機能データベースフィールドがヌルである場合null
を返します。
(field, next) => {
console.log('TypeCasting', field.type, field.length);
if (field.type == 'TINY' && field.length == 1) {
let value = field.string();
return value ? (value == '1') : null;
}
return next();
}
これは機能します。 'connection'オブジェクトに' typeCast'属性を入れてください。 – Ties