Size: a a a

Sequelize - community (eng/ru)

2020 November 13

s

svasta☦️ in Sequelize - community (eng/ru)
мне нужно для этого создавать новую миграцию? чтобы добавить столбец этот?
источник

YZ

Yaroslav Zhymkov in Sequelize - community (eng/ru)
svasta☦️
мне нужно для этого создавать новую миграцию? чтобы добавить столбец этот?
Нет, он только в модели существуют, не физически
источник

s

svasta☦️ in Sequelize - community (eng/ru)
аа, просто в файл модели добавить и перезапустить приложение?
источник

YZ

Yaroslav Zhymkov in Sequelize - community (eng/ru)
Да
источник

s

svasta☦️ in Sequelize - community (eng/ru)
окей, а я могу сетер где-то в другом месте описать?
источник

s

svasta☦️ in Sequelize - community (eng/ru)
чтобы в файле с моделью не делать запросы к бд и тд.
источник

YZ

Yaroslav Zhymkov in Sequelize - community (eng/ru)
Почитайте документацию, вы не поняли что это
источник

s

svasta☦️ in Sequelize - community (eng/ru)
Как можно сделать сортировку по полю "вложенной" таблицы, а если ничего не передано то сортировать по дате основной?
источник
2020 November 14

С

Сергей in Sequelize - community (eng/ru)
Ярослав, здравствуйте! Подскажите, пожалуйста, если сталкивались.
В документации написано, чтобы использовать транзакции для всех запросов, нужно установить модуль cls-hooked и настроить namespace, но я не хочу использовать транзакции для всех запросов, а только для необходимых, а чтобы использовать для необходимых надо вторым аргументом передавать имя транзакции так: { transaction: t }, всё хорошо, работает как надо, но я обнаружил в консоли, что даже если не передавать вторым аргументом имя транзакции, запросы находящиеся между const t = await sequelize.transaction(); и await t.commit(); попадают в транзакцию, и в консоли это выглядит так:
START TRANSACTION;
Executing (default): UPDATE "users" SET "balance"=$1 WHERE "id" = $2
Executing (default): SELECT "id", "price" FROM "Books" AS "Books" WHERE "Books"."game_id" = 1 AND "Books"."user_id" = 2 LIMIT 1;
Executing (default): UPDATE "Books" SET "price"=$1 WHERE "id" = $2
Executing (14d60769-e10f-4710-97c6-39d8d4eac848): COMMIT;

Теперь вопрос - действительно ли в этом случае применяется транзакция, или это просто срабатывает объявление const t = await sequelize.transaction(); и await t.commit();?
Спрашиваю, потому что я пробовал выполнять вот такой код без вложений других запросов между ним:
const t = await sequelize.transaction();
await t.commit();

и в консоль попадало это:
Executing (8edf75bb-dd6e-44d0-a03f-efd5862150df): START TRANSACTION;
Executing (8edf75bb-dd6e-44d0-a03f-efd5862150df): COMMIT;
источник

С

Сергей in Sequelize - community (eng/ru)
источник

С

Сергей in Sequelize - community (eng/ru)
источник

С

Сергей in Sequelize - community (eng/ru)
вопрос снимаю, не работает как транзакция, если не передать аргумент transaction: t
источник

VL

Vladimir Lastovka in Sequelize - community (eng/ru)
Сергей
Ярослав, здравствуйте! Подскажите, пожалуйста, если сталкивались.
В документации написано, чтобы использовать транзакции для всех запросов, нужно установить модуль cls-hooked и настроить namespace, но я не хочу использовать транзакции для всех запросов, а только для необходимых, а чтобы использовать для необходимых надо вторым аргументом передавать имя транзакции так: { transaction: t }, всё хорошо, работает как надо, но я обнаружил в консоли, что даже если не передавать вторым аргументом имя транзакции, запросы находящиеся между const t = await sequelize.transaction(); и await t.commit(); попадают в транзакцию, и в консоли это выглядит так:
START TRANSACTION;
Executing (default): UPDATE "users" SET "balance"=$1 WHERE "id" = $2
Executing (default): SELECT "id", "price" FROM "Books" AS "Books" WHERE "Books"."game_id" = 1 AND "Books"."user_id" = 2 LIMIT 1;
Executing (default): UPDATE "Books" SET "price"=$1 WHERE "id" = $2
Executing (14d60769-e10f-4710-97c6-39d8d4eac848): COMMIT;

Теперь вопрос - действительно ли в этом случае применяется транзакция, или это просто срабатывает объявление const t = await sequelize.transaction(); и await t.commit();?
Спрашиваю, потому что я пробовал выполнять вот такой код без вложений других запросов между ним:
const t = await sequelize.transaction();
await t.commit();

и в консоль попадало это:
Executing (8edf75bb-dd6e-44d0-a03f-efd5862150df): START TRANSACTION;
Executing (8edf75bb-dd6e-44d0-a03f-efd5862150df): COMMIT;
Тут же видно что Вы запустили транзакцию 14d60769-e10f-4710-97c6-39d8d4eac848 но не передали ее в запрос поэтому запросы выполнились в транзакции default, т.е. откатить Вы эти запросы не сможете,а вот если бы Вы передали транзакцию в апдейт, то он бы выглядел Executing (8edf75bb-dd6e-44d0-a03f-efd5862150df): UPDATE "users" SET "balance"=$1 WHERE "id" = $2, то есть происходил в контексте данной транзакции. Более того допустим Вы запустите транзакцию и в контексте транзакции а сделаете инсерт, а селект того что заинсертили сделаете не передав транзакциию, то селект ничего не найдет, так как он не в контексте
источник

С

Сергей in Sequelize - community (eng/ru)
спасибо! я уже разобрался, жаль конечно, что нельзя автоматом привязывать контекст указав запросы внутри конструкции и так, чтобы sequalize сам понимал, что запросы могут быть и во вложенных функциях внутри конструкции, было бы очень удобно)
источник

VL

Vladimir Lastovka in Sequelize - community (eng/ru)
Можно
источник

VL

Vladimir Lastovka in Sequelize - community (eng/ru)
Cls-hooked по моему даёт такую возможность
источник

С

Сергей in Sequelize - community (eng/ru)
да, но он тогда для всех запросов применяет транзакции
источник

С

Сергей in Sequelize - community (eng/ru)
насколько я понял
источник

VL

Vladimir Lastovka in Sequelize - community (eng/ru)
Я как бы не знаю Вашу задачу и чем это для нее плохо, но можно использовать еще конкурентные транзакции
источник

RK

Roman Karas' in Sequelize - community (eng/ru)
Ребят-ребят! А скажите пожалуйста. Есть два where условия, одно в корне, другое в include. Можно ли их черерез "ИЛИ" объединить? По умолчанию, через "И" работают. Я конечно понимаю что немного бредовый вопрос, если смотреть на SQL.. но всё-ж
источник