Цель Lubejs — быть элегантным и эффективным, но он может не подходить всем разработчикам. Однако в проектах, где его использование целесообразно, он будет самым элегантным и эффективным решением.
Для обеспечения лучшего пользовательского опыта данная ORM система использует следующие обязательные правила:
undefined
и null
Согласно соглашению, null
соответствует значению DbNull
в базе данных, а undefined
указывает на отсутствие значения, которое не влияет на данные базы данных.
Пример: lube.update('table', { a: undefined, b: null });
Результат выполнения SQL запроса: update table set b = DbNull
Внимание: при использовании ORM, по умолчанию Repository обновляет все поля, чтобы избежать проблем с типами данных или другими вопросами
Это правило также применяется к отношениям между объектами ORM, как показано ниже:
db.save(Employee, {
id: 100,
name: 'username',
user: undefined,
position: null
});
Этот код удалит связь position
, но не затронет связь user
.
Конвертация типов данных JS в промежуточные типы:- Число -> DbType.int32
DbType.string(DbType.MAX)
DbType.boolean
DbType.Binary(DbType.MAX)
DbType.Binary(DbType.MAX)
DbType.Binary(DbType.MAX)
DbType.object<any>()
DbType.array<any>()
DbType.uuid
DbType.decimal
## Создание моделей данных (рекомендовано использовать Code First)Если первичный ключ не указан, то автоматически создается поле id
как первичный ключ;
Использование декораторов и рефлексии в TypeScript находится в экспериментальной стадии, поэтому эта возможность временно недоступна.
import { context, DbType } from 'lubejs';
/**
* Энтитет "Человек"
*/
class Person {
id: number;
name: string;
birthday: Date;
}
/**
* Класс контекста базы данных
*/
class DefaultDbContext extends DbContext {
get person(): Repository<Person> {
return this.getRepository(Person);
}
}
context(DefaultDbContext, builder => {
const entity = builder.entity(Person)
entity.column(p => p.id, Number).dbType(DbType.int32);
})
Используйте [многие ко многим (промежуточная таблица)](многие ко многим (промежуточная таблица)) вместо, но не указывайте атрибуты ссылки (они будут автоматически объявлены как скрытые).
Reflect.has(item, property)
возвращает false; присваивание undefined
или null
также считается операцией изменения);Когда значение свойства существует Хранилище Repository сначала сохраняет связанное существо, затем обновляет его первичный ключ в качестве внешнего ключа текущей сущности, после чего сохраняет саму сущность.
Когда значение свойства отсутствует Хранилище Repository устанавливает внешний ключ текущей сущности равным null, затем сохраняет саму сущность.
Когда значение свойства существует Хранилище Repository сначала сохраняет связанное существо, затем обновляет его первичный ключ в качестве внешнего ключа текущей сущности, после чего сохраняет саму сущность.
Когда значение свойства отсутствует Хранилище Repository устанавливает внешний ключ текущей сущности равным null, затем сохраняет саму сущность.
Когда значение свойства существует Хранилище Repository сначала сохраняет саму сущность, если текущее свойство связанного существа не является оригинальным связаным существом в базе данных, то оно будет автоматически удалено. Затем будет автоматически обновлён внешний ключ текущей сущности до последнего значения ключа. После этого сохранится связанное существо.Установка в null или undefined Хранилище Repository рассматривает это как операцию удаления связанного объекта.
Когда значение свойства существует Хранилище Repository сначала сохраняет саму сущность; если коллекция связанных объектов содержит новые данные, они будут сохранены, если содержат уже существующие данные, они будут обновлены. Если связанные объекты в базе данных не находятся в текущей коллекции связанных объектов, то эти данные будут удалены.
Установка в null, undefined или [] Хранилище Repository рассматривает это как операцию очистки и удаляет все связанные объекты из базы данных.
Когда значение свойства существует Хранилище Repository сначала сохраняет саму сущность, затем сохраняет коллекцию связанных объектов, после чего выполняет следующие действия над промежуточной таблицей:
Все вышеописанные операции не приведут к удалению записей ассоциативной таблицы.
Фиктивные связи предназначены для предоставления дополнительной поддержки за пределами референтных связей базы данных. Фиктивные связи не создают никаких внешних ключей в базе данных.
Эта функциональность была создана для обеспечения хорошего опыта работы с вложенными запросами для представлений, таблиц или запросов.
Мы не будем применять жёсткие ограничения, а вместо этого будем определять целевые таблицы для внешних ключей через поле типа. Такое отношение называется динамической связью.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )