新しい populate フックを使用しようとしていますが、うまくいかないようです。何が間違っているのかわかりません。
マーチャントモデルに 1:1 で関連付けられたmerchatTypeMapモデルがあり、 MerchantTypeMapにクエリを実行すると、関連するマーチャントが関連付けられて応答するはずです。
MerchantTypeMapサービス:
'use strict';
const service = require('feathers-sequelize');
const merchantTypeMap = require('./merchantTypeMap-model');
const hooks = require('./hooks');
module.exports = function(){
const app = this;
const options = {
Model: merchantTypeMap(app.get('sequelize')),
paginate: {
default: 5,
max: 25
}
};
// Initialize our service with any options it requires
app.use('/merchantTypeMaps', service(options));
// Get our initialize service to that we can bind hooks
const merchantTypeMapService = app.service('/merchantTypeMaps');
// Set up our before hooks
merchantTypeMapService.before(hooks.before);
// Set up our after hooks
merchantTypeMapService.after(hooks.after);
};
これは私のMerchantTypeMapモデル コードです。
'use strict';
// merchantTypeMap-model.js - A sequelize model
//
// See http://docs.sequelizejs.com/en/latest/docs/models-definition/
// for more of what you can do here.
const Sequelize = require('sequelize');
module.exports = function(sequelize) {
const merchantTypeMap = sequelize.define('merchantTypeMaps', {
id: {
type: Sequelize.INTEGER(10),
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
merchantId: {
type: Sequelize.INTEGER(10),
allowNull: true,
references: {
model: 'merchants',
key: 'id'
},
field: 'merchant_id'
},
merchantTypeId: {
type: Sequelize.INTEGER(10),
allowNull: true,
references: {
model: 'merchantTypes',
key: 'id'
},
field: 'merchantType_id'
}
}, {
freezeTableName: true
});
merchantTypeMap.belongsTo(sequelize.models.merchants, {foreignKey: 'merchant_id'});
merchantTypeMap.sync();
return merchantTypeMap;
};
ここで私の MerchantTypeMap サービス フック:
'use strict';
const globalHooks = require('../../../hooks');
const hooks = require('feathers-hooks-common');
const schema = {
include: [{
service: 'merchants',
nameAs: 'merchantItem',
parentField: 'merchantId',
childField: 'id',
}]
};
exports.before = {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
};
exports.after = {
all: [],
find: [
hooks.populate( { schema } )
],
get: [
hooks.populate( { schema } )
],
create: [],
update: [],
patch: [],
remove: []
};
マーチャントサービス:
'use strict';
const service = require('feathers-sequelize');
const merchantTypeMap = require('./merchantTypeMap-model');
const merchants = require('./merchants-model');
const hooks = require('./hooks');
module.exports = function(){
const app = this;
merchantTypeMap(app.get('sequelize'));
const options = {
Model: merchants(app.get('sequelize')),
paginate: {
default: 5,
max: 25
}
};
// Initialize our service with any options it requires
app.use('/merchants', service(options));
// Get our initialize service to that we can bind hooks
const merchantsService = app.service('/merchants');
// Set up our before hooks
merchantsService.before(hooks.before);
// Set up our after hooks
merchantsService.after(hooks.after);
};
そして商人モデル:
'厳密を使用';
// merchants-model.js - A sequelize model
//
// See http://docs.sequelizejs.com/en/latest/docs/models-definition/
// for more of what you can do here.
const Sequelize = require('sequelize');
module.exports = function(sequelize) {
const merchants = sequelize.define('merchants', {
id: {
type: Sequelize.INTEGER(10),
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
title: {
type: Sequelize.STRING,
allowNull: true,
field: 'title'
},
latitude: {
type: Sequelize.STRING,
allowNull: true,
field: 'latitude'
},
longitude: {
type: Sequelize.STRING,
allowNull: true,
field: 'latitude'
},
address: {
type: Sequelize.STRING,
allowNull: true,
field: 'address'
},
icon: {
type: Sequelize.STRING,
allowNull: true,
field: 'icon'
},
zoneId: {
type: Sequelize.INTEGER(10),
allowNull: true,
references: {
model: 'zones',
key: 'id'
},
field: 'zone_id'
}
}, {
freezeTableName: true
});
merchants.belongsToMany(sequelize.models.merchantTypes, {through: sequelize.models.merchantTypeMaps});
merchants.sync();
return merchants;
};