THAM GIA MySQL nodejs

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ều

Tì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
}]
}]
6

Lư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í danh

const 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ư sau

User.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ụ sau

User.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));
0

Lư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ợp

Cũ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 theo

Tham 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ưới

const tasks = await Task.findAll({ include: User });
console.log(JSON.stringify(tasks, null, 2));
1

Cá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
1

Ví 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ất

const tasks = await Task.findAll({ include: User });
console.log(JSON.stringify(tasks, null, 2));
2

SQL đã tạo

const tasks = await Task.findAll({ include: User });
console.log(JSON.stringify(tasks, null, 2));
3

Cú 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ạn

const tasks = await Task.findAll({ include: User });
console.log(JSON.stringify(tasks, null, 2));
4

SQL được tạo, theo thứ tự

const tasks = await Task.findAll({ include: User });
console.log(JSON.stringify(tasks, null, 2));
5

Tìm nạp bằng User.findAll({ include: { model: Task, required: true }});1 (chỉ dành cho MySQL, MariaDB, PostgreSQL và MSSQL)

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à sai

const tasks = await Task.findAll({ include: User });
console.log(JSON.stringify(tasks, null, 2));
6

Tả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úc

const tasks = await Task.findAll({ include: User });
console.log(JSON.stringify(tasks, null, 2));
7

Há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));
9

Lư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ày

Tuy 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
}
}]
0

Nế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
}
}]
2

Bấ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
}
}]
3

SQL đã tạo (sử dụng SQLite)

[{
"name": "A Task",
"id": 1,
"userId": 1,
"user": {
"name": "John Doe",
"id": 1
}
}]
4

bao 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
}
}]
5

Bao 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
}
}]
7

Trong 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
}
}]
8

Trong 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));
10

const users = await User.findAll({ include: Task });
console.log(JSON.stringify(users, null, 2));
2

Truy 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));
11

Sử dụng const tasks = await Task.findAll({ include: User });console.log(JSON.stringify(tasks, null, 2));12 với bao gồm

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));
3

Vì 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ộc

const users = await User.findAll({ include: Task });
console.log(JSON.stringify(users, null, 2));
4

Truy 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

Nodejs có thể kết nối với MySQL không?

Khi bạn đã thiết lập và chạy MySQL trên máy tính của mình, bạn có thể truy cập nó bằng cách sử dụng Nút. js . Để truy cập cơ sở dữ liệu MySQL bằng Node. js, bạn cần có trình điều khiển MySQL.

Làm cách nào để THAM GIA các bảng trong nodejs?

Tham gia hai hoặc nhiều bàn . by using a JOIN statement.

Tôi có thể sử dụng THAM GIA trong MySQL không?

Bảng tham gia MySQL . Lưu ý rằng cột "CustomerID" trong bảng "Orders" đề cập đến "CustomerID" trong bảng "Customers". Mối quan hệ giữa 2 bảng trên là cột "CustomerID". A JOIN clause is used to combine rows from two or more tables, based on a related column between them. Notice that the "CustomerID" column in the "Orders" table refers to the "CustomerID" in the "Customers" table. The relationship between the two tables above is the "CustomerID" column.

Làm cách nào để thêm THAM GIA MySQL?

Để nối các bảng, bạn sử dụng mệnh đề nối chéo, nối trong, nối trái hoặc nối phải. Mệnh đề nối được sử dụng trong câu lệnh SELECT xuất hiện sau mệnh đề TỪ. Lưu ý rằng MySQL chưa hỗ trợ FULL OUTER JOIN. .
tham gia bên trong
Chỗ nối bên trái
tham gia ngay
tham gia chéo