PHP code example of hindy / orm

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);
    }
}

User::activeUsers()->filter(['name__startswith' => 'A'])->all();

$model = User::objects()->filter(['pk' => 5])->get();

User::objects()->all();

User::objects()->asArray()->all();

User::objects()->count();

User::objects()->filter(['name' => 'Max'])->exclude(['address' => 'New York'])->order(['-address'])->all();

User::objects()->filter(['group__name' => 'example'])->all();

User::objects()->exclude(['group__name' => 'users'])->all();

User::objects()->order(['name'])->all();

User::objects()->order(['-name'])->all();

User::objects()->order(['?'])->all();

'name__exact'

User::objects()->filter(['name__exact' => 'Max'])->all();

User::objects()->filter(['name__isnull' => true])->all();

Product::objects()->filter(['price__lt' => 100.00])->all();

Product::objects()->filter(['price__lte' => 100.00])->all();

$dateTime = new DateTime();
$dateTime->setTimestamp(strtotime('+15 days'))
Product::objects()->filter(['created_at__lte' => $dateTime])->all();

Product::objects()->filter(['price__gt' => 100.00])->all();

Product::objects()->filter(['price__gte' => 100.00])->all();

User::objects()->filter(['name__exact' => 'Max'])->all();

User::objects()->filter(['name__contains' => 'ax'])->all();

User::objects()->filter(['name__startswith' => 'M'])->all();

User::objects()->filter(['name__endswith' => 'on'])->all();

User::objects()->filter(['pk__in' => [1, 2]])->all();

Product::objects()->filter(['price__range' => [10, 20]])

Product::objects()->filter(['date_added__year' => 2014])

Product::objects()->filter(['date_added__year' => 12])

Product::objects()->filter(['date_added__day' => 25])

Product::objects()->filter(['date_added__week_day' => 2])

Product::objects()->filter(['date_added__hour' => 10])

Product::objects()->filter(['date_added__minute' => 35])

Product::objects()->filter(['date_added__minute' => 45])

Product::objects()->filter(['name__regex' => '[a-z]'])

new OrQ([['status' => 1, 'user_id' => 1],['status' => 2, 'user_id' => 4]]);

Requests::objects()->filter([new OrQ([['status' => 1, 'user_id' => 1],['status' => 2, 'user_id' => 4]])])->all()
sql
SELECT * FROM user WHERE name='Max' AND address != 'New York' ORDER BY address DESC
sql
SELECT * FROM user WHERE price < 100.00
sql
SELECT * FROM user WHERE price <= 100.00
sql
SELECT * FROM user WHERE price > 100.00