1. Go to this page and download the library: Download hindy/orm library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
hindy / orm example snippets
Model::setConnection([
'sqlite::memory'
]);
class MyModel extends Model
{
public function getFields()
{
return [
// Ключ - название поля при обращении к модели
'name' => [
// Тип поля
'class' => CharField::className(),
// Длинна поля
'length' => 100,
// NULL|NOT NULL
'null' => false,
// "Читабельное" имя модели. Используется в Mindy\Form\ModelForm
// для построения форм автоматически.
'verboseName' => 'Продукция',
// Пример валидаторов
'validators' => [
function ($value) {
if (mb_strlen($value, 'UTF-8') < 3) {
return "Minimal length < 3";
}
return true;
},
new UniqueValidator
]
],
'price' => [
'class' => CharField::className(),
// Значение по умолчанию
'default' => 0
],
'description' => [
'class' => TextField::className(),
'default' => ''
],
'category' => [
'class' => ForeignField::className(),
'modelClass' => Category::className(),
'null' => true
],
'lists' => [
'class' => ManyToManyField::className(),
'modelClass' => ProductList::className()
]
];
}
}
$sync = new Sync([
new MyModel()
]);
$sync->create();
// Если модель с идентичными полями найдется, то ORM вернет ее, иначе создаст.
$model = MyModel::objects()->getOrCreate(['name' => 'Поросенок петр', 'price' => 1]);
$modelTwo = new MyModel;
// Массовое присвоение аттрибутов
$modelTwo->setData([
'name' => 'Рубаха',
'price' => 2
]);
// Валидация и сохранение
if($modelTwo->isValid() && $modelTwo->save()) {
echo 'Модель сохранена';
}
$modelThree = new MyModel;
$modelThree->name = 'Джинсы';
$modelThree->price = 3;
// Валидация и сохранение
if($modelThree->isValid() && $modelThree->save()) {
echo 'Модель сохранена';
}
// SELECT * FROM my_model WHERE price >= 2
$models = MyModel::objects()->filter(['price__gte' => 2])->all();
// SELECT * FROM my_model WHERE name = 'Рубаха'
$models = MyModel::objects()->filter(['name' => 'Рубаха'])->all();
// SELECT * FROM my_model WHERE id IN (1, 2, 3)
$models = MyModel::objects()->filter(['pk__in' => [1, 2, 3]])->all();
$sync = new Sync([
new MyModel()
]);
$sync->delete();
User::objects()
class ActiveUsersManager extends Manager
{
public function getQuerySet()
{
$qs = parent::getQuerySet();
return $qs->filter(['status' => User::STATUS_ACTIVE]);
}
}
class User extends Model
{
public function getFields()
{
'name' => [
'class' => CharField::className(),
],
'status' => [
'class' => BooleanField::className(),
'default' => false
]
}
public static function activeUsersManager($instance = null)
{
$className = get_called_class();
return new ActiveUsersManager($instance ? $instance : new $className);
}
}