Mysql 动摇 }=需要('.')) const{id,name,thumbnail}=product 常量默认视图=1 //等待ProductViewMap.create({ProductId:id,ProductViewId:DEFAULT\u VIEW}) const item=await ViewItem.create({ProductId:id,ProductViewId:DEFAULT\u VIEW}) console.log(项目) 等待ProductRating.create({ProductId:id}) }) Product.prototype.findActiveItem=异步函数(){ 常量{ViewItem,View}=require('.')) 返回ViewItem.findOne({ 子查询:false, 包括:[ {model:View,as:'View',required:true} ], 其中:{ 显示:对, ProductId:this.id } }) } Product.prototype.findActiveView=异步函数(){ 常量{ViewItem,View}=require('.')) 返回View.findOne({ 子查询:false, 包括:[ { 模型:视图, 如:"视图",, 要求:正确, 包括:[ { 型号:ViewItem, 作为:“视图项”, 要求:正确, 其中:{ 显示:真 } } ] } ] }) } 退货 }

Mysql 动摇 }=需要('.')) const{id,name,thumbnail}=product 常量默认视图=1 //等待ProductViewMap.create({ProductId:id,ProductViewId:DEFAULT\u VIEW}) const item=await ViewItem.create({ProductId:id,ProductViewId:DEFAULT\u VIEW}) console.log(项目) 等待ProductRating.create({ProductId:id}) }) Product.prototype.findActiveItem=异步函数(){ 常量{ViewItem,View}=require('.')) 返回ViewItem.findOne({ 子查询:false, 包括:[ {model:View,as:'View',required:true} ], 其中:{ 显示:对, ProductId:this.id } }) } Product.prototype.findActiveView=异步函数(){ 常量{ViewItem,View}=require('.')) 返回View.findOne({ 子查询:false, 包括:[ { 模型:视图, 如:"视图",, 要求:正确, 包括:[ { 型号:ViewItem, 作为:“视图项”, 要求:正确, 其中:{ 显示:真 } } ] } ] }) } 退货 },mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,模型/ViewItem.js “严格使用” const lodash=require('lodash') module.exports=(sequelize,数据类型)=>{ const ViewItem=sequelize.define('ViewItem'{ 名称:DataTypes.STRING, 缩略图:DataTypes.STRING, 零售价格:DataTypes.INTEGER, 折扣:DataTypes.FLOAT, staticDiscount:DataTypes.INTEGE

模型/ViewItem.js

“严格使用”
const lodash=require('lodash')
module.exports=(sequelize,数据类型)=>{
const ViewItem=sequelize.define('ViewItem'{
名称:DataTypes.STRING,
缩略图:DataTypes.STRING,
零售价格:DataTypes.INTEGER,
折扣:DataTypes.FLOAT,
staticDiscount:DataTypes.INTEGER,
description:DataTypes.STRING,
推广:{
类型:DataTypes.JSON,
defaultValue:null
},
位置:DataTypes.INTEGER,
显示:DataTypes.BOOLEAN
}, {
时间戳:对,
偏执狂:是的
})
ViewItem.associate=功能(模型){
//这里可以定义关联
ViewItem.belongsTo(models.ProductView{
as:“ProductView”,
foreignKey:'ProductViewId',
onDelete:“级联”
})
ViewItem.belongsTo(型号.产品、{
作为‘产品’,
onDelete:“级联”
})
}
/*钩子*/
ViewItem.afterCreate(异步函数(项){
常数{
产品,,
ProductViewMap
}=需要('.'))
常数{
身份证件
ProductId,
ProductViewId
}=项目
/*联接表에 一行를 추가합니다 */
等待ProductViewMap.create({
ProductId,
ProductViewId
})
/*看法아이템중에 같은 产品를 가르키는 상품의 노출 설정을 假的로 합니다. */
const product=wait product.findOne({
其中:{
id:ProductId
}
})
等待ViewItem.update({
显示:假,
}, {
其中:{
ProductId:ProductId
}
})
/* 생성되는 视图项의 초기 展示속성은 产品의 显示를 따릅니다. */
等待此更新({
显示:product.display
}, {
其中:{
id:id
}
})
})
ViewItem.listAndApply=异步函数(选项){
常数{
ProductView,
产品,,
}=需要('.'))
const payload=lodash.cloneDeep(选项)
让{
包括,,
哪里
命令,
极限,
抵消,
产品
}=有效载荷
如果(!include)include=[]
如果(!product)product={}
where=where?where:null
订单=订单?订单:空
限制=限制?限制:空
偏移量=偏移量?偏移量:空
product.where=product.where?product.where:null
const items=wait ViewItem.findAll({
子查询:false,
包括:[{
型号:ProductView,
as:“ProductView”,
必填项:true
},
{
型号:产品,
作为‘产品’,
要求:正确,
where:product.where,
包括:包括
}
],
where:where,
极限:极限,
订单:订单
})
returnitems.map(item=>applyView(item))
}
返回视图项
}
/*私人职能*/
常量applyView=(项目)=>{
如果(!item)返回null
如果(!item.Product)返回空值
如果(!item.ProductView)返回null
const product=lodash.cloneDeep(item.product.toJSON())
const view=lodash.cloneDeep(item.ProductView.toJSON())
/* 
看法를 적용합니다.
#1. 가격정보를 수정합니다.
#2. 스티커와 태그를 추가합니다.
#3. 상세페이지 网址을 추가합니다.
*/
if(查看额外折扣){
常量折扣=product.discount+view.additionalDiscount
常量零售价=数学底价(产品原价*(1-折扣/100))
产品折扣=折扣
product.retailPrice=零售价格
}else if(查看折扣){
const retailPrice=数学底价(product.retailPrice*(1-view.折扣/100))
常数折扣=数学下限((1-零售价/产品原价)*100)
product.retailPrice=零售价格
产品折扣=折扣
}
if(查看静态折扣){
const retailPrice=product.retailPrice-view.static折扣
常数折扣=数学下限((1-零售价/产品原价)*100)
product.retailPrice=零售价格
产品折扣=折扣
}
如果(view.tag)product.tag=view.tag
如果(查看标签)product.sticker=标签
product.detailUrl=view.detailUrl?`${view.detailUrl}/${item.id}`:`/products/${item.id}`
/*
视图项
#1. 상품정보를 수정합니다.
#2. 가격정보를 수정합니다.
#3.零售价格가 있다면 기존 계산값을 무시하고 이 값을 사용합니다.
*/
如果(item.name)product.name=item.name
如果(item.thumboil)product.thumboil=item.thumboil
如果(item.description)product.description=item.description
如果(项目折扣){}
if(item.static折扣){}
如果(item.retailPrice)product.retailPrice=item.retailPrice
返回({
…产品,
ProductView:view,
id:item.id,
ProductId:item.ProductId,
ProductViewId:item.ProductViewId
})
}
req.filter.order.push([sequelize.literal(`"Product.rating"`), 'desc'])
// OR
req.filter.order.push([sequelize.literal("`Product.rating`"), 'desc'])
Error: Order must be type of array or instance of a valid sequelize method.