mirror of
https://github.com/strapi/strapi.git
synced 2025-11-10 23:29:33 +00:00
Merge pull request #2556 from chaitanyya/feature/998
Custom timestamp column names in database
This commit is contained in:
commit
8bbccad862
@ -27,6 +27,7 @@ The info key on the model-json states information about the model. This informat
|
|||||||
The options key on the model-json states.
|
The options key on the model-json states.
|
||||||
- `idAttribute`: This tells the model which attribute to expect as the unique identifier for each database row (typically an auto-incrementing primary key named 'id'). _Only valid for strapi-hook-bookshelf_
|
- `idAttribute`: This tells the model which attribute to expect as the unique identifier for each database row (typically an auto-incrementing primary key named 'id'). _Only valid for strapi-hook-bookshelf_
|
||||||
- `idAttributeType`: Data type of `idAttribute`, accepted list of value bellow. _Only valid for strapi-hook-bookshelf_
|
- `idAttributeType`: Data type of `idAttribute`, accepted list of value bellow. _Only valid for strapi-hook-bookshelf_
|
||||||
|
- `timestamps`: This tells the model which attributes to use for timestamps. Accepts either `boolean` or `Array` of strings where frist element is create data and second elemtent is update date. Default value when set to `true` for Bookshelf is `["created_at", "updated_at"]` and for MongoDB is `["createdAt", "updatedAt"]`.
|
||||||
|
|
||||||
## Define the attributes
|
## Define the attributes
|
||||||
|
|
||||||
|
|||||||
@ -89,7 +89,7 @@ module.exports = function(strapi) {
|
|||||||
// Register the final model for Bookshelf.
|
// Register the final model for Bookshelf.
|
||||||
const loadedModel = _.assign({
|
const loadedModel = _.assign({
|
||||||
tableName: definition.collectionName,
|
tableName: definition.collectionName,
|
||||||
hasTimestamps: _.get(definition, 'options.timestamps') === true,
|
hasTimestamps: _.get(definition, 'options.timestamps', false),
|
||||||
idAttribute: _.get(definition, 'options.idAttribute', 'id'),
|
idAttribute: _.get(definition, 'options.idAttribute', 'id'),
|
||||||
associations: [],
|
associations: [],
|
||||||
defaults: Object.keys(definition.attributes).reduce((acc, current) => {
|
defaults: Object.keys(definition.attributes).reduce((acc, current) => {
|
||||||
@ -100,7 +100,14 @@ module.exports = function(strapi) {
|
|||||||
return acc;
|
return acc;
|
||||||
}, {})
|
}, {})
|
||||||
}, definition.options);
|
}, definition.options);
|
||||||
|
// Use default timestamp column names if value is `true`
|
||||||
|
if (_.get(loadedModel, 'hasTimestamps') === true) {
|
||||||
|
_.set(loadedModel, 'hasTimestamps', ['created_at', 'updated_at']);
|
||||||
|
}
|
||||||
|
// Use false for values other than `Boolean` or `Array`
|
||||||
|
if (!_.isArray(_.get(loadedModel, 'hasTimestamps')) && !_.isBoolean(_.get(loadedModel, 'hasTimestamps'))) {
|
||||||
|
_.set(loadedModel, 'hasTimestamps', false);
|
||||||
|
}
|
||||||
if (_.isString(_.get(connection, 'options.pivot_prefix'))) {
|
if (_.isString(_.get(connection, 'options.pivot_prefix'))) {
|
||||||
loadedModel.toJSON = function(options = {}) {
|
loadedModel.toJSON = function(options = {}) {
|
||||||
const { shallow = false, omitPivot = false } = options;
|
const { shallow = false, omitPivot = false } = options;
|
||||||
@ -619,10 +626,10 @@ module.exports = function(strapi) {
|
|||||||
|
|
||||||
// Add created_at and updated_at field if timestamp option is true
|
// Add created_at and updated_at field if timestamp option is true
|
||||||
if (loadedModel.hasTimestamps) {
|
if (loadedModel.hasTimestamps) {
|
||||||
definition.attributes['created_at'] = {
|
definition.attributes[_.isString(loadedModel.hasTimestamps[0]) ? loadedModel.hasTimestamps[0] : 'created_at'] = {
|
||||||
type: 'timestamp'
|
type: 'timestamp'
|
||||||
};
|
};
|
||||||
definition.attributes['updated_at'] = {
|
definition.attributes[_.isString(loadedModel.hasTimestamps[1]) ? loadedModel.hasTimestamps[1] : 'updated_at'] = {
|
||||||
type: 'timestampUpdate'
|
type: 'timestampUpdate'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -701,8 +708,8 @@ module.exports = function(strapi) {
|
|||||||
|
|
||||||
// Remove from attributes (auto handled by bookshlef and not displayed on ctb)
|
// Remove from attributes (auto handled by bookshlef and not displayed on ctb)
|
||||||
if (loadedModel.hasTimestamps) {
|
if (loadedModel.hasTimestamps) {
|
||||||
delete definition.attributes['created_at'];
|
delete definition.attributes[_.isString(loadedModel.hasTimestamps[0]) ? loadedModel.hasTimestamps[0] : 'created_at'];
|
||||||
delete definition.attributes['updated_at'];
|
delete definition.attributes[_.isString(loadedModel.hasTimestamps[1]) ? loadedModel.hasTimestamps[1] : 'updated_at'];
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve();
|
resolve();
|
||||||
|
|||||||
@ -207,7 +207,16 @@ module.exports = function (strapi) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Use provided timestamps if the elemnets in the array are string else use default.
|
||||||
|
if (_.isArray(_.get(definition, 'options.timestamps'))) {
|
||||||
|
const timestamps = {
|
||||||
|
createdAt: _.isString(_.get(definition, 'options.timestamps[0]')) ? _.get(definition, 'options.timestamps[0]') : 'createdAt',
|
||||||
|
updatedAt: _.isString(_.get(definition, 'options.timestamps[1]')) ? _.get(definition, 'options.timestamps[1]') : 'updatedAt'
|
||||||
|
};
|
||||||
|
collection.schema.set('timestamps', timestamps);
|
||||||
|
} else {
|
||||||
collection.schema.set('timestamps', _.get(definition, 'options.timestamps') === true);
|
collection.schema.set('timestamps', _.get(definition, 'options.timestamps') === true);
|
||||||
|
}
|
||||||
collection.schema.set('minimize', _.get(definition, 'options.minimize', false) === true);
|
collection.schema.set('minimize', _.get(definition, 'options.minimize', false) === true);
|
||||||
|
|
||||||
collection.schema.options.toObject = collection.schema.options.toJSON = {
|
collection.schema.options.toObject = collection.schema.options.toJSON = {
|
||||||
|
|||||||
@ -77,15 +77,10 @@ export function* submit() {
|
|||||||
let shouldAddTranslationSuffix = false;
|
let shouldAddTranslationSuffix = false;
|
||||||
|
|
||||||
// Remove the updated_at & created_at fields so it is updated correctly when using Postgres or MySQL db
|
// Remove the updated_at & created_at fields so it is updated correctly when using Postgres or MySQL db
|
||||||
if (record.updated_at) {
|
const timestamps = get(schema, ['models', currentModelName, 'options', 'timestamps'], null);
|
||||||
delete record.created_at;
|
if (timestamps) {
|
||||||
delete record.updated_at;
|
delete record[timestamps[0]];
|
||||||
}
|
delete record[timestamps[1]];
|
||||||
|
|
||||||
// Remove the updatedAt & createdAt fields so it is updated correctly when using MongoDB
|
|
||||||
if (record.updatedAt) {
|
|
||||||
delete record.createdAt;
|
|
||||||
delete record.updatedAt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -17,6 +17,7 @@ const pickData = (model) => _.pick(model, [
|
|||||||
'globalId',
|
'globalId',
|
||||||
'globalName',
|
'globalName',
|
||||||
'orm',
|
'orm',
|
||||||
|
'options.timestamps',
|
||||||
'loadedModel',
|
'loadedModel',
|
||||||
'primaryKey',
|
'primaryKey',
|
||||||
'associations'
|
'associations'
|
||||||
@ -84,6 +85,7 @@ module.exports = async cb => {
|
|||||||
pageEntries: 10,
|
pageEntries: 10,
|
||||||
defaultSort: model.primaryKey,
|
defaultSort: model.primaryKey,
|
||||||
sort: 'ASC',
|
sort: 'ASC',
|
||||||
|
options: model.options,
|
||||||
editDisplay: {
|
editDisplay: {
|
||||||
availableFields: {},
|
availableFields: {},
|
||||||
fields: [],
|
fields: [],
|
||||||
@ -330,8 +332,9 @@ module.exports = async cb => {
|
|||||||
// Here we just need to add the data from the current schema Object
|
// Here we just need to add the data from the current schema Object
|
||||||
apisToAdd.map(apiPath => {
|
apisToAdd.map(apiPath => {
|
||||||
const api = _.get(schema.models, apiPath);
|
const api = _.get(schema.models, apiPath);
|
||||||
const { search, filters, bulkActions, pageEntries } = _.get(prevSchema, 'generalSettings');
|
const { search, filters, bulkActions, pageEntries, options } = _.get(prevSchema, 'generalSettings');
|
||||||
|
|
||||||
|
_.set(api, 'options', options);
|
||||||
_.set(api, 'filters', filters);
|
_.set(api, 'filters', filters);
|
||||||
_.set(api, 'search', search);
|
_.set(api, 'search', search);
|
||||||
_.set(api, 'bulkActions', bulkActions);
|
_.set(api, 'bulkActions', bulkActions);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user