Postgresql продолжить поиск с помощью объединения «один ко многим»

#node.js #postgresql

#node.js #postgresql

Вопрос:

Новичок в postgresql, и я использую node и Sequelize. У меня есть база данных с таблицами транспортных средств и фотографиями:

 ¦Vehicles:
¦
¦ id     99
¦ make   Nissan
¦ model  Micra

¦Photos:
¦
¦ id            1      2
¦ photoUrl    xxx    yyy
¦ photoOrder    1      2
¦ vehicleId    99     99 
 

То, на что я надеюсь при поиске по идентификатору транспортного средства, — это вывод, подобный этому:

 [
    {
        "id":99,
        "make":"Nisan",
        "model":"Micra",
        "photos":[
            {
                "photoOrder":1,
                "photoUrl":"xxx"
            },
            {
                "photoOrder":2,
                "photoUrl":"yyy"
            }
        ]
    }
]
 

Ассоциации, которые у меня есть:

 db.photos.belongsTo(db.vehicles);
db.vehicles.hasMany(db.photos);
 

Я могу добавлять транспортные средства и добавлять фотографии. Когда я извлекаю транспортное средство (ы), я получаю информацию о транспортном средстве, но без фотографий:

 export function findAll(req, res) {
    Vehicle.findAll()
        .then(data => {
            res.send(data);
        })
        .catch(err => {
           ...
        });
}
 

Правильно ли я определил свои ассоциации и как мне достичь желаемого результата?

Ответ №1:

Вы можете получить доступ к фотографиям с помощью getPhotos функции на транспортных средствах. Если вы хотите охотно загружать их, то вам нужно сделать что-то вроде

 Vehicle.findAll({
  include: Photos
})
 

Документация здесь .. https://sequelize.org/master/manual/assocs.html#eager-loading-example

Комментарии:

1. Если вы всегда всегда хотите фотографии.. вы должны посмотреть на области… sequelize.org/master/manual/scopes.html

2. Идеальный. Спасибо. И я внимательно рассмотрю области видимости. Также спасибо.