Size: a a a

TypeORM - Русскоязычное сообщество

2021 February 08

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
внтури пг можно создать несколько баз данных и для каждой поставить логи и пасс свой
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
из пгадмин или дата грип сперва подрубись куда хочешь с необходимыми паролями
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
птом уже из кода
источник

E

Egor in TypeORM - Русскоязычное сообщество
Как получать полный объект после сохранения реляции по id?
Допустим, есть две сущности

User
id
name
pictures[]: Picture

Picture
id
name

как советуют на гитхабе, я сохраняю картинки по id, не запрашивая полные энтити из базы, потому что при сохранении юзера они мне не нужны:

user = new User(id, name, [{id: 1}, {id: 2}])
savedUser = await transactionalEntityManager.save(user, { reload: true });

я
ожидаю, что в итоге, раз уж указано reload: true, в saveUser будет лежать что-то вроде:
id: 1
name: 'user'
pictures: [{id: 1, name: 'pic1'}, {id: 2, name: 'pic2'}]

но получаю то, что и так лежит в моем юзере, инфа о картинках не подгружается:
id: 1
name: 'user'
pictures: [{id: 1}, {id: 2}]

возможно ли получить ожидаемый результат с полным релоадом и всей инфой о картинках? кроме как перезапросить из базы юзера по id

в чем смысл этого релоада?
источник

E

Egor in TypeORM - Русскоязычное сообщество
если кто-то напорется на это, вот ответ с гитхаба:
its not supposed to return entire model. It returns same model + adds properties that were generated by database (used by database's DEFAULT). If you need entire model you need to query model again.

https://github.com/typeorm/typeorm/issues/3490
источник

E

Egor in TypeORM - Русскоязычное сообщество
выходит, пытаясь сэкономить на подтягивании постов, мы теряем на полном перезапросе юзера, что выглядит как полная идиотия, учитывая, насколько сложный и медленный save(), вряд ли было бы сильно хуже, если бы он работал по очевидному сценарию
источник

E

Egor in TypeORM - Русскоязычное сообщество
источник

ЛС

Логинов Сергей... in TypeORM - Русскоязычное сообщество
Спс
источник

E

Egor in TypeORM - Русскоязычное сообщество
тоже хороший наброс. ORM, которая позиционируется как лучший выбор для типизированного языка, поощряет практики, когда вместо нормальной сущности у нас то один набор полей заполнен, то другой. это хорошо видно как в предложении автора сохранять реляции по ид приведенным мной способом: "вместо new Picture(id, name) вкорячивай {id: id} и так сойдет!", так и в том, что под видом Picture тебе возвращают {id: id}. Вернон с Эвансом не одобрямс. Или это я что-то делаю не так?
источник

UK

Umed Khudoiberdiev in TypeORM - Русскоязычное сообщество
@egorgumin reload нужен для того чтобы отключить дополнительный запрос на подгрузку данных сгенерированных DEFAULT-ом в некоторых бд. Этот флаг нужен для оптимизации, если вам не нужны DEFAULTы и вы не хотите тратить время на лишний запрос
источник

UK

Umed Khudoiberdiev in TypeORM - Русскоязычное сообщество
Egor
Как получать полный объект после сохранения реляции по id?
Допустим, есть две сущности

User
id
name
pictures[]: Picture

Picture
id
name

как советуют на гитхабе, я сохраняю картинки по id, не запрашивая полные энтити из базы, потому что при сохранении юзера они мне не нужны:

user = new User(id, name, [{id: 1}, {id: 2}])
savedUser = await transactionalEntityManager.save(user, { reload: true });

я
ожидаю, что в итоге, раз уж указано reload: true, в saveUser будет лежать что-то вроде:
id: 1
name: 'user'
pictures: [{id: 1, name: 'pic1'}, {id: 2, name: 'pic2'}]

но получаю то, что и так лежит в моем юзере, инфа о картинках не подгружается:
id: 1
name: 'user'
pictures: [{id: 1}, {id: 2}]

возможно ли получить ожидаемый результат с полным релоадом и всей инфой о картинках? кроме как перезапросить из базы юзера по id

в чем смысл этого релоада?
вы не можете ожидать что save вам загрузит все все, это не входит в его задачи. Вы можете послать на сохранение большой объект в котором кучу связок и вы не можете ожидать что какой-то save выполнит десятки если не больше запросов на то чтобы загрузить то что вам нужно. Также не забывайте что связи могут быть двухсторонними и между объектами может быть циркулар
источник

E

Egor in TypeORM - Русскоязычное сообщество
Umed Khudoiberdiev
вы не можете ожидать что save вам загрузит все все, это не входит в его задачи. Вы можете послать на сохранение большой объект в котором кучу связок и вы не можете ожидать что какой-то save выполнит десятки если не больше запросов на то чтобы загрузить то что вам нужно. Также не забывайте что связи могут быть двухсторонними и между объектами может быть циркулар
Что интересно, многие именно такого поведения и ожидают. И автор библиотеки в итоге решил добавить его как дефолтное, но пулл реквест с решением висит с августа 2020 на проверке
источник

E

Egor in TypeORM - Русскоязычное сообщество
О, так ведь это вы и есть) может, посмотрите его?)
источник

UK

Umed Khudoiberdiev in TypeORM - Русскоязычное сообщество
ссылку можно? какая именно это прка
источник

E

Egor in TypeORM - Русскоязычное сообщество
refactor: make save method fetch all columns by default by ejose19 · Pull Request #5680 · typeorm/typeorm · GitHub
https://github.com/typeorm/typeorm/pull/5680
источник

UK

Umed Khudoiberdiev in TypeORM - Русскоязычное сообщество
*all columns*, не all relations
источник

UK

Umed Khudoiberdiev in TypeORM - Русскоязычное сообщество
вы говорите о relationах
источник

E

Egor in TypeORM - Русскоязычное сообщество
Понял, то есть единственный вариант с relations - перезапрос?
источник

UK

Umed Khudoiberdiev in TypeORM - Русскоязычное сообщество
правильно, это не в компетенции метода save
источник

UK

Umed Khudoiberdiev in TypeORM - Русскоязычное сообщество
иначе куда больше людей скажут что это абсурд
источник