Я упростил мою проблему с двумя таблицами, такими как coconut и coconut_lists. В таблице Coconut хранятся спецификации магазина coconut и coconut_lists, в котором у продавца есть кокос. Каждый раз создается связь между продавцом и кокосом, которая вставляется в таблицу coconut_lists.
Я пытался использовать ключевое слово с атрибутами, устанавливая различные отношения HasMany, HasOne, BelongsToMany.
Coconut_List
import { Column, DataType, Model, Table, ForeignKey, BelongsTo } from 'sequelize-typescript';
import Coconut from './coconut';
@Table({
modelName: 'cononuts_list',
timestamps: true,
paranoid: true,
})
export default class CoconutList extends Model<CoconutList> {
@Column({
allowNull: false,
primaryKey: true,
autoIncrement: true,
type: DataType.INTEGER,
})
public id: number;
@Column({
type: DataType.STRING,
allowNull: false,
})
public sellerId: string;
@ForeignKey(() => coconut)
@Column({
type: DataType.INTEGER,
allowNull: false,
})
public coconutId: number;
@BelongsTo(() => Coconut, 'coconutId')
public coconut: Coconut;
}
Кокосовое
import { Column, DataType, Model, Table, HasMany } from 'sequelize-typescript';
import CoconutList from './coconutList';
@Table({
modelName: 'coconuts',
timestamps: true,
paranoid: true,
})
export default class Coconut extends Model<Coconut> {
@Column({
allowNull: false,
primaryKey: true,
autoIncrement: true,
type: DataType.INTEGER,
})
public id: number;
@HasMany(() => CoconutList, 'id')
public coconutList: CoconutList[];
@Column({
type: DataType.INTEGER,
allowNull: false,
})
public weight: number;
@Column({
type: DataType.INTEGER,
allowNull: false,
})
public count: number;
@Column({
type: DataType.FLOAT,
allowNull: false,
})
public size: number;
}
Запрос:
const coconutsBySeller = await CoconutList.findAll({
include: [
{
model: Coconut,
attributes: ['weight', 'size', 'count'],
},
],
attributes: ['sellerId'],
});
Вывод кода выглядит следующим образом:
[
{
"sellerId": "f3ff90d8-ed8e-42c9-9c7b-d607111a359e",
"coconut": {
"weight": 100,
"count": 6,
"size": 11,
}
},
{
"sellerId": "f3ff90d8-ed8e-42c9-9c7b-d607111a359e",
"coconut": {
"weight": 200,
"count": 12,
"size": 20,
}
},
{
"sellerId": "ffffaaaa-ed8e-42c9-9c7b-d607111a359e",
"coconut": {
"weight": 300,
"count": 18,
"size": 50,
}
},
{
"sellerId": "ffffaaaa-ed8e-42c9-9c7b-d607111a359e",
"coconut": {
"weight": 100,
"count": 6,
"size": 11,
}
}
]
Вместо этого я хочу получить
[
{
"sellerId": "f3ff90d8-ed8e-42c9-9c7b-d607111a359e",
[{
"weight": 100,
"count": 6,
"size": 11,
},
{
"weight": 200,
"count": 12,
"size": 20,
}]
},
{
"sellerId": "ffffaaaa-ed8e-42c9-9c7b-d607111a359e",
[{
"weight": 300,
"count": 18,
"size": 50,
},
{
"weight": 100,
"count": 6,
"size": 11,
}
]
]
В дополнение к формату данных мне также интересно узнать, возможно ли получить min_max значений полей веса, количества, размера кокосовых орехов, назначенных продавцу с помощью Sequelize в вышеупомянутом запросе.