Skip to content

Instantly share code, notes, and snippets.

@napa3um
Created August 31, 2011 10:23
Show Gist options
  • Select an option

  • Save napa3um/1183248 to your computer and use it in GitHub Desktop.

Select an option

Save napa3um/1183248 to your computer and use it in GitHub Desktop.
пример API для ORM
// сначала конфигурацию таблиц описываем
new Table({
name: 'user',
primaryKey: 'id',
fields: {
'name': { _type: 'str' }, // потом будет описание типа поля, пока никак не используется
},
});
new Table({
name: 'filial',
primaryKey: 'id',
fields: {
'name': { _type: 'str' },
'admin': { _type: 'str' },
},
relations: {
'admin': { // many to one - пока только для такого типа отношений пилю :)
toTable: 'user',
fromField: 'admin'
}
}
});
// теперь описываем модель Filial
Model.init(Filial, 'filial'); // регистрируем модель и привязываем к классу всю магию
function Filial(){
// всякая инициализация, какая нужна разработчику
// ...
this.initModel(); // в конструкторе надо вызвать этот метод (он магией уже прикручен к этому классу)
}
Filial.prototype.someMethod = function(){}; // всякие методы и свойства, какие нужны разработчику
// ...
// теперь поработаем с объектами
var filial = new Filial; // этот вариант работает тоже: var filial = new Model('filial');
filial.name = 'first title';
filial.save(function(id){ // insert
// id == filial.primaryKey
});
// ...
var filial = (new Filial).load(id, function(model){ // select
// filial == model
filial.name = 'second title';
filial.save(); // update
});
// ...
// вот тут ещё надо придумать, как работать со связкой моделей
var filial = (new Model('filial')).params({ // эти параметры записываются в экземпляр модели, чтобы влиять на load
fields: ['*', 'admin.*'], // указываются поля для загрузки, в данном случае подгружается связанная модель User
filter: 'self.name like $?', // подставится в запрос в where
filterParams: ['%title%']
})
.load(function(model){ // не указан ключ, потому используются вышеуказанные параметры
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment