namespace App;
use Runtime.BaseObject;
use Runtime.ORM.Record;
use Runtime.ORM.Annotations.AutoIncrement;
use Runtime.ORM.Annotations.BigIntType;
use Runtime.ORM.Annotations.Primary;
use Runtime.ORM.Annotations.StringType;
class Item extends Record
{
/**
* Returns table name
*/
pure string getTableName() => "items";
/**
* Returns table schema
*/
pure memorize Collection<BaseObject> schema() =>
[
/* Fields */
new BigIntType{"name": "id"},
new StringType{"name": "name"},
new DateTimeType{"name": "gmtime_create", "autocreate": true},
new DateTimeType{"name": "gmtime_update", "autoupdate": true},
/* Index */
new AutoIncrement{"name": "id"},
new Primary{"keys": ["id"]},
];
}use Runtime.ORM.Relation;
Relation<Item> relation = new Relation(classof Item);Record createRecord(Map data = null);Пример:
/* Create item */
Item item = relation.createRecord({
"name": "Item",
});
/* Or */
Item item = new Item();
await item.save();
/* Refresh item */
await item.refresh();
DateTime gmtime_create = item.gmtime_create;Получает список всех аннотаций для Relation. Аннотации это схема данных.
Vector<BaseObject> getAnotations();Получает аннотацию для поля счетчика.
AutoIncrement getAutoIncrement();Получает список первичных ключей для Relation
Vector<string> getPrimaryKeys();Получат первичный ключ по данным
Map getPrimaryKey(Map data);Получает фильтр для первичного ключа. Параметр use_full_key добавляет названию таблицы к названию поля.
Vector<QueryFilter> getPrimaryFilter(Map data, bool use_full_key = true);Пример:
Relation relation = new Relation(classof Item);
Map post_data = this.filter(this.request.data, new MapData{
"pk": relation.getPrimaryRules(),
"item": relation.getItemRules(),
});
/* Get primary key */
Map pk = relation.getPrimaryFilter(post_data.get("item"));Подготовить данные к сохранению в базу данных
async Map toDatabase(Map data);Преобразовать данные из базы данных в примитивные объекты
async Map fromDatabase(Map data);Сохранить или создать объект в базе данных
async void save(Record item);Удалить объект из базы данных
async void delete(Record item);Обновить данные объекта из базы данных. Полезно, когда объект был сохранен в базу данных и нужно получить его новую версию.
async void refresh(Record item);Создание нового экземпляра запроса
Query query();
Query select(Vector fields = null);Получить результат запроса
async QueryResult<Map> fetchAll(Query q)Получить результат запроса в виде Record
async QueryResult<Record> fetchAllRecords(Query q)Получить только одну строчку
async Map fetchOne(Query q)Получить только один Record
async Record fetchRecord(Query q)Найти строчки по фильтру
async QueryResult find(Vector<QueryFilter> filter)Найти Record по фильтру
async Record findRecord(Vector<QueryFilter> filter)Найти Record по primary key
async Record findByPk(Map pk)
async Record findById(var id)Найти или создать объект по фильтру.
async Record findOrCreate(Map filter)Если объекта в базе нет, то будет создан экземпляр Record. Но в базе он появится, только после save()