У меня есть две таблицы базы данных в настоящее время, представляющие отношения «один-к-одному». Действия, имеющие ID (целое число, автоинкремент, первичный ключ) и имя (varchar (255), а не null); и ActivitySlugs, у которых есть идентификатор (такой же, как указано выше), slugname (не null varchar) и activity_id (внешний ключ для Activities.id).Объединить много-к-одному список объектов
В настоящее время я должен получить список всех видов деятельности и все их слизней (как один из списка), так что это выглядит примерно так:
[
{id: 1, name: "long name", slugs: ["nick", "names"]},
{id: 2, name: "foobar", slugs: ["foo", "bar"]}
]
Наивного решение (и о единственном один я могу думать) это сделать «SELECT *» на каждом столе, а затем объединить их, но затем я получаю данные, выглядит следующим образом:
activities = [
{id: 1, name: "long name"},
{id: 2, name: "foobar"}
]
slugs = [
{id: 1, slugname: "nick", activity_id: 1},
{id: 2, slugname: "names", activity_id: 1},
{id: 3, slugname: "foo", activity_id: 2},
{id: 4, slugname: "bar", activity_id: 2}
]
Итак, я могу перебрать и и добавить их :
activities.forEach(function(activity) {
slugs = [];
activitySlugs.forEach(function(slug) {
if (slug.activity_id == activity.id) {
slugs.push(slug.name);
}
});
activity.slugs = slugs;
);
Это кажется неуклюжим, медленным и неочищенным. Это, конечно, не будет масштабироваться вообще. К сожалению, я не могу найти лучшего способа заставить их объединиться как много-к-одному с таким массивом.