Như đã đề cập ngắn gọn trong hướng dẫn liên kết, Tải háo hức là hành động truy vấn dữ liệu của một số mô hình cùng một lúc [một mô hình 'chính' và một hoặc nhiều mô hình được liên kết]. Ở cấp độ SQL, đây là truy vấn có một hoặc nhiều phép nối
Khi điều này được thực hiện, các mô hình được liên kết sẽ được Sequelize thêm vào [các] trường được tạo tự động, được đặt tên thích hợp trong các đối tượng được trả về
Trong Sequelize, tải háo hức chủ yếu được thực hiện bằng cách sử dụng tùy chọn
const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
5 trên truy vấn công cụ tìm mô hình [chẳng hạn như const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
6, const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
7, v.v.]Ví dụ cơ bản
Giả sử thiết lập sau
const User = sequelize.define['user', { name: DataTypes.STRING }, { timestamps: false }];
const Task = sequelize.define['task', { name: DataTypes.STRING }, { timestamps: false }];
const Tool = sequelize.define['tool', {
name: DataTypes.STRING,
size: DataTypes.STRING
}, { timestamps: false }];
User.hasMany[Task];
Task.belongsTo[User];
User.hasMany[Tool, { as: 'Instruments' }];
Đang tìm nạp một phần tử được liên kết
VÂNG. Vì vậy, trước hết, hãy tải tất cả các tác vụ với người dùng được liên kết của chúng
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
đầu ra
[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
Ở đây,
const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
8 là const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
9. Điều này cho thấy rằng khi Sequelize tìm nạp các mô hình được liên kết, chúng sẽ được thêm vào đối tượng đầu ra dưới dạng các phiên bản mô hìnhỞ trên, mô hình được liên kết đã được thêm vào một trường mới có tên là
[{
"name": "John Doe",
"id": 1,
"tasks": [{
"name": "A Task",
"id": 1,
"userId": 1
}]
}]
0 trong tác vụ đã tìm nạp. Tên của trường này được Sequelize chọn tự động dựa trên tên của mô hình được liên kết, trong đó dạng số nhiều của nó được sử dụng khi áp dụng [i. e. , khi hiệp hội là [{
"name": "John Doe",
"id": 1,
"tasks": [{
"name": "A Task",
"id": 1,
"userId": 1
}]
}]
1 hoặc [{
"name": "John Doe",
"id": 1,
"tasks": [{
"name": "A Task",
"id": 1,
"userId": 1
}]
}]
2]. Nói cách khác, kể từ [{
"name": "John Doe",
"id": 1,
"tasks": [{
"name": "A Task",
"id": 1,
"userId": 1
}]
}]
3, một tác vụ được liên kết với một người dùng, do đó, lựa chọn hợp lý là dạng số ít [mà Sequelize tự động theo sau]Đang tìm nạp tất cả các phần tử liên quan
Bây giờ, thay vì tải người dùng được liên kết với một tác vụ nhất định, chúng tôi sẽ làm ngược lại - chúng tôi sẽ tìm thấy tất cả các tác vụ được liên kết với một người dùng nhất định
Cuộc gọi phương thức về cơ bản là giống nhau. Điểm khác biệt duy nhất là bây giờ, trường bổ sung được tạo trong kết quả truy vấn sử dụng dạng số nhiều [trong trường hợp này là ____8_______4] và giá trị của nó là một mảng các thể hiện tác vụ [thay vì một thể hiện đơn lẻ như trên]
const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
đầu ra
________số 8_______
Lưu ý rằng trình truy cập [thuộc tính
[{
"name": "John Doe",
"id": 1,
"tasks": [{
"name": "A Task",
"id": 1,
"userId": 1
}]
}]
4 trong ví dụ kết quả] là số nhiều vì liên kết là một-nhiềuTìm nạp một liên kết Bí danh
Nếu một liên kết được đặt bí danh [sử dụng tùy chọn
[{
"name": "John Doe",
"id": 1,
"tasks": [{
"name": "A Task",
"id": 1,
"userId": 1
}]
}]
6], bạn phải chỉ định bí danh này khi bao gồm mô hình. Thay vì chuyển mô hình trực tiếp đến tùy chọn const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
5, thay vào đó, bạn nên cung cấp cho đối tượng hai tùy chọn. [{
"name": "John Doe",
"id": 1,
"tasks": [{
"name": "A Task",
"id": 1,
"userId": 1
}]
}]
8 và [{
"name": "John Doe",
"id": 1,
"tasks": [{
"name": "A Task",
"id": 1,
"userId": 1
}]
}]
6Lưu ý cách những người dùng
const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
0 được đặt bí danh là const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
1 ở trên. Để có được quyền đó, bạn phải chỉ định mô hình bạn muốn tải, cũng như bí danhconst users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
đầu ra
[{
"name": "John Doe",
"id": 1,
"Instruments": [{
"name": "Scissor",
"id": 1,
"userId": 1
}]
}]
Bạn cũng có thể bao gồm tên bí danh bằng cách chỉ định một chuỗi khớp với bí danh liên kết
User.findAll[{ include: 'Instruments' }]; // Also works
User.findAll[{ include: { association: 'Instruments' } }]; // Also works
Yêu cầu háo hức tải
Khi tải háo hức, chúng tôi có thể buộc truy vấn chỉ trả lại các bản ghi có mô hình được liên kết, chuyển đổi truy vấn một cách hiệu quả từ
const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
2 mặc định thành const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
3. Điều này được thực hiện với tùy chọn const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
4, như sauUser.findAll[{
include: {
model: Task,
required: true
}
}];
Tùy chọn này cũng hoạt động trên bao gồm lồng nhau
Tải háo hức được lọc ở cấp mô hình được liên kết
Khi tải háo hức, chúng tôi cũng có thể lọc mô hình được liên kết bằng cách sử dụng tùy chọn
const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
5, như trong ví dụ sauUser.findAll[{
include: {
model: Tool,
as: 'Instruments'
where: {
size: {
[Op.ne]: 'small'
}
}
}
}];
SQL đã tạo
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
0Lưu ý rằng truy vấn SQL được tạo ở trên sẽ chỉ tìm nạp những người dùng có ít nhất một công cụ phù hợp với điều kiện [không phải là
const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
6, trong trường hợp này]. Đây là trường hợp bởi vì, khi tùy chọn const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
5 được sử dụng bên trong một const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
5, Sequelize sẽ tự động đặt tùy chọn const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
9 thành const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
9. Điều này có nghĩa là, thay vì một const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
2, một const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
3 được thực hiện, chỉ trả về các mô hình gốc có ít nhất một mẫu con phù hợpCũng lưu ý rằng tùy chọn
const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
5 được sử dụng đã được chuyển đổi thành điều kiện cho mệnh đề [{
"name": "John Doe",
"id": 1,
"Instruments": [{
"name": "Scissor",
"id": 1,
"userId": 1
}]
}]
4 của const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
3. Để có được mệnh đề [{
"name": "John Doe",
"id": 1,
"Instruments": [{
"name": "Scissor",
"id": 1,
"userId": 1
}]
}]
6 cấp cao nhất, thay vì mệnh đề [{
"name": "John Doe",
"id": 1,
"Instruments": [{
"name": "Scissor",
"id": 1,
"userId": 1
}]
}]
4, phải thực hiện một số việc khác. Điều này sẽ được hiển thị tiếp theoTham chiếu đến các cột khác
Nếu bạn muốn áp dụng mệnh đề
[{
"name": "John Doe",
"id": 1,
"Instruments": [{
"name": "Scissor",
"id": 1,
"userId": 1
}]
}]
6 trong một mô hình được bao gồm đề cập đến một giá trị từ một mô hình được liên kết, bạn chỉ cần sử dụng hàm [{
"name": "John Doe",
"id": 1,
"Instruments": [{
"name": "Scissor",
"id": 1,
"userId": 1
}]
}]
9, như thể hiện trong ví dụ bên dướiconst tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
1Các mệnh đề phức tạp ở cấp cao nhất
Để có được các mệnh đề
[{
"name": "John Doe",
"id": 1,
"Instruments": [{
"name": "Scissor",
"id": 1,
"userId": 1
}]
}]
6 cấp cao nhất liên quan đến các cột lồng nhau, Sequelize cung cấp một cách để tham chiếu các cột lồng nhau. cú pháp User.findAll[{ include: 'Instruments' }]; // Also works
User.findAll[{ include: { association: 'Instruments' } }]; // Also works
1Ví dụ, nó có thể được sử dụng để di chuyển điều kiện where từ một mô hình được bao gồm từ điều kiện
[{
"name": "John Doe",
"id": 1,
"Instruments": [{
"name": "Scissor",
"id": 1,
"userId": 1
}]
}]
4 sang mệnh đề [{
"name": "John Doe",
"id": 1,
"Instruments": [{
"name": "Scissor",
"id": 1,
"userId": 1
}]
}]
6 cấp cao nhấtconst tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
2SQL đã tạo
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
3Cú pháp
User.findAll[{ include: 'Instruments' }]; // Also works
User.findAll[{ include: { association: 'Instruments' } }]; // Also works
4 cũng hoạt động đối với các cột được lồng sâu ở nhiều cấp độ, chẳng hạn như User.findAll[{ include: 'Instruments' }]; // Also works
User.findAll[{ include: { association: 'Instruments' } }]; // Also works
5. Do đó, bạn có thể sử dụng điều này để tạo các bộ lọc phức tạp trên các cột được lồng sâuĐể hiểu rõ hơn về tất cả sự khác biệt giữa tùy chọn bên trong
const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
5 [được sử dụng bên trong một const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
5], có và không có tùy chọn const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
9, và một const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
5 cấp cao nhất sử dụng cú pháp User.findAll[{ include: 'Instruments' }]; // Also works
User.findAll[{ include: { association: 'Instruments' } }]; // Also works
4, dưới đây chúng tôi có bốn ví dụ cho bạnconst tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
4SQL được tạo, theo thứ tự
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
5Tìm nạp bằng User.findAll[{
include: {
model: Task,
required: true
}
}];
1 [chỉ dành cho MySQL, MariaDB, PostgreSQL và MSSQL]
User.findAll[{
include: {
model: Task,
required: true
}
}];
Theo mặc định, các liên kết được tải bằng cách sử dụng
User.findAll[{
include: {
model: Task,
required: true
}
}];
2 - nghĩa là nó chỉ bao gồm các bản ghi từ bảng cha. Bạn có thể thay đổi hành vi này thành User.findAll[{
include: {
model: Task,
required: true
}
}];
1 bằng cách chuyển tùy chọn User.findAll[{
include: {
model: Task,
required: true
}
}];
4, nếu phương ngữ bạn đang sử dụng hỗ trợ điều đóHiện tại, SQLite không hỗ trợ nối phải
Ghi chú.
User.findAll[{
include: {
model: Task,
required: true
}
}];
4 chỉ được tôn trọng nếu const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
9 là saiconst tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
6Tải nhiều háo hức
Tùy chọn
const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
5 có thể nhận một mảng để tìm nạp nhiều mô hình được liên kết cùng một lúcconst tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
7Háo hức tải với mối quan hệ Nhiều-Nhiều
Khi bạn thực hiện tải háo hức trên một mô hình có mối quan hệ Thuộc về nhiều, theo mặc định, Sequelize cũng sẽ tìm nạp dữ liệu của bảng liên kết. Ví dụ
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
8đầu ra
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
9Lưu ý rằng mọi phiên bản thanh háo hức được tải vào thuộc tính
User.findAll[{
include: {
model: Task,
required: true
}
}];
8 đều có một thuộc tính bổ sung được gọi là User.findAll[{
include: {
model: Task,
required: true
}
}];
9, đây là phiên bản Sequelize có liên quan của mô hình đường giao nhau. Theo mặc định, Sequelize tìm nạp tất cả các thuộc tính từ bảng liên kết để xây dựng thuộc tính bổ sung nàyTuy nhiên, bạn có thể chỉ định thuộc tính nào bạn muốn tìm nạp. Điều này được thực hiện với tùy chọn
User.findAll[{
include: {
model: Tool,
as: 'Instruments'
where: {
size: {
[Op.ne]: 'small'
}
}
}
}];
0 được áp dụng bên trong tùy chọn User.findAll[{
include: {
model: Tool,
as: 'Instruments'
where: {
size: {
[Op.ne]: 'small'
}
}
}
}];
1 của phần bao gồm. Ví dụ[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
0Nếu bạn không muốn bất kỳ thứ gì từ bảng nối, bạn có thể cung cấp rõ ràng một mảng trống cho tùy chọn
User.findAll[{
include: {
model: Tool,
as: 'Instruments'
where: {
size: {
[Op.ne]: 'small'
}
}
}
}];
0 bên trong tùy chọn User.findAll[{
include: {
model: Tool,
as: 'Instruments'
where: {
size: {
[Op.ne]: 'small'
}
}
}
}];
1 của tùy chọn const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
5 và trong trường hợp này sẽ không có gì được tìm nạp và thậm chí thuộc tính bổ sung sẽ không được tạo[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
1đầu ra
[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
2Bất cứ khi nào bao gồm một mô hình từ mối quan hệ Nhiều-Nhiều, bạn cũng có thể áp dụng bộ lọc trên bảng nối. Điều này được thực hiện với tùy chọn
const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
5 được áp dụng bên trong tùy chọn User.findAll[{
include: {
model: Tool,
as: 'Instruments'
where: {
size: {
[Op.ne]: 'small'
}
}
}
}];
1 của phần bao gồm. Ví dụ[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
3SQL đã tạo [sử dụng SQLite]
[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
4bao gồm tất cả mọi thứ
Để bao gồm tất cả các mô hình được liên kết, bạn có thể sử dụng các tùy chọn
User.findAll[{
include: {
model: Tool,
as: 'Instruments'
where: {
size: {
[Op.ne]: 'small'
}
}
}
}];
7 và User.findAll[{
include: {
model: Tool,
as: 'Instruments'
where: {
size: {
[Op.ne]: 'small'
}
}
}
}];
8[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
5Bao gồm các bản ghi đã xóa mềm
Trong trường hợp bạn muốn háo hức tải các bản ghi đã xóa mềm, bạn có thể làm điều đó bằng cách đặt
User.findAll[{
include: {
model: Tool,
as: 'Instruments'
where: {
size: {
[Op.ne]: 'small'
}
}
}
}];
9 thành const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
00[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
6Đặt hàng các hiệp hội được tải háo hức
Khi bạn muốn áp dụng mệnh đề
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
01 cho các mô hình được tải háo hức, bạn phải sử dụng tùy chọn cấp cao nhất const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
02 với các mảng tăng cường, bắt đầu với đặc điểm kỹ thuật của mô hình lồng nhau mà bạn muốn sắp xếpĐiều này được hiểu rõ hơn với các ví dụ
[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
7Trong trường hợp có mối quan hệ nhiều-nhiều, bạn cũng có thể sắp xếp theo thuộc tính trong bảng thông qua. Ví dụ: giả sử chúng ta có mối quan hệ Nhiều-nhiều giữa
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
03 và const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
04 có mô hình đường giao nhau là const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
05, bạn có thể thực hiện[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
8Trong tất cả các ví dụ trên, bạn đã nhận thấy rằng tùy chọn
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
02 được sử dụng ở cấp cao nhất. Tình huống duy nhất mà const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
02 cũng hoạt động bên trong tùy chọn bao gồm là khi sử dụng const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
08. Trong trường hợp đó, cách sử dụng như sau[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
9Đặt hàng phức tạp liên quan đến truy vấn phụ
Hãy xem hướng dẫn về truy vấn phụ để biết ví dụ về cách sử dụng truy vấn phụ để hỗ trợ sắp xếp phức tạp hơn
Tải háo hức lồng nhau
Bạn có thể sử dụng tải háo hức lồng nhau để tải tất cả các mô hình liên quan của một mô hình liên quan
const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
0đầu ra
const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
1Điều này sẽ tạo ra một kết nối bên ngoài. Tuy nhiên, một mệnh đề
const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
5 trên một mô hình có liên quan sẽ tạo một liên kết bên trong và chỉ trả về các phiên bản có các mô hình con phù hợp. Để trả về tất cả các phiên bản gốc, bạn nên thêm const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
10const users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
2Truy vấn trên sẽ trả về tất cả người dùng và tất cả công cụ của họ, trừ những giáo viên được liên kết với
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
11Sử dụng const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
12 với bao gồm
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
Hỗ trợ chức năng tiện ích
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
12 bao gồm. Chỉ bao gồm những gì được đánh dấu là const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
9 mới được xem xét trong const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
15. Ví dụ: nếu bạn muốn tìm và đếm tất cả người dùng có hồ sơconst users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
3Vì phần bao gồm cho
const tasks = await Task.findAll[{ include: User }];
console.log[JSON.stringify[tasks, null, 2]];
16 đã đặt ____20_______9 nên sẽ dẫn đến kết nối bên trong và chỉ những người dùng có hồ sơ mới được tính. Nếu chúng tôi loại bỏ const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
9 khỏi danh sách bao gồm, thì cả người dùng có và không có hồ sơ đều sẽ được tính. Việc thêm mệnh đề const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
5 vào phần bao gồm sẽ tự động khiến nó trở thành bắt buộcconst users = await User.findAll[{ include: Task }];
console.log[JSON.stringify[users, null, 2]];
4Truy vấn ở trên sẽ chỉ tính những người dùng có hồ sơ đang hoạt động, bởi vì
const users = await User.findAll[{
include: { model: Tool, as: 'Instruments' }
}];
console.log[JSON.stringify[users, null, 2]];
9 được đặt hoàn toàn thành true khi bạn thêm mệnh đề where vào phần bao gồm