Download the PHP package visavi/motor-orm without Composer
On this page you can find all versions of the php package visavi/motor-orm. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package motor-orm
Motor ORM
Данный скрипт предоставляет ООП подход для работы текстовыми данными сохраненными в файловой системе
Структура данных CSV совместима, но с некоторыми изменения для более быстрой работы
Возможности
Builder
- Поиск по уникальному ключу
- Поиск по любым заданным условиям
- Возврат структуры файла
- Возврат количества записей в файле
- Возврат информации о существовании записи
- Сортировка строк
- Запись строки в файл с генерацией автоинкрементного ключа
- Обновление записей по любым условиям
- Удаление записей по любым условиям
- Приведение типов (Casts)
- Scope
- Очистка файла
- Жадная загрузка
- Связь один к одному
- Связь один ко многим
- Связь многие ко многим
Collection
- Преобразование коллекции в массив
- Получение первой записи
- Получение последней записи
- Получение количества записей в коллекции
- Добавление записи в коллекцию
- Удаление записи из коллекции
- Установка значения в коллекции
- Проверка коллекции на пустоту
- Очистка коллекции
- Срез коллекции
- Обход с получением ключа и значения из коллекции
Collection Paginate
- Расширяет класс Collection
- Получение текущей странице
- Получение количества страниц
- Получение массива со страницами
Migration
- Создание таблицы
- Удаление таблицы
- Создание колонок
- Переименовывание колонок
- Удаление колонок
- Проверка существования
Работы с изменениями в файле, в том числе и вставка выполняется с блокировкой файла для защиты от случайного удаления данных в случае если несколько пользователей одновременно пишут в файл
Первых столбец в файле считается уникальным
Может быть строковым и числовым
Если столбец строковой, то все вставки должны быть с уже заданным уникальным ключом
Если столбец числовой, то уникальный ключ будет генерироваться автоматически
Запросы
Все запросы проводятся через модели в котором должен быть указан путь к файлу с данными В самих моделях могут быть реализованы дополнительные методы
Примеры
Частичный поиск (Like)
Поиск по частичному совпадению
Нестрогий поиск (Lax)
Поиск по нестрогому совпадению
При поиске orm использует строгое сравнение, чтобы задействовать нестрогий режим, можно использовать lax
Приведение типов (Casts)
По умолчанию все поля полученные из файла строковые
За некоторыми исключениями
- Поле primary key - int
- Поля заканчивающиеся на _id и _at - int
- Пустые поля - null
Для переопределения используйте свойство casts
Поддерживаются следующие типы
- 'int', 'integer' => int
- 'real', 'float', 'double' => float
- 'string' => string
- 'bool', 'boolean' => bool
- 'object' => json_decode($value, false),
- 'array' => json_decode($value, true),
Условия запросов (Scope)
Каждый scope — это обычный метод, который начинается с префикса scope. Именно по префиксу ORM понимает, что это scope. Внутрь scope передаётся запрос, на который можно навешивать дополнительные условия.
Использование:
Динамические условия
Некоторые scope зависят от параметров, передающихся в процессе составления запроса. Для этого достаточно описать эти параметры внутри scope после параметра $query:
Использование:
Условные выражения (Conditional clauses)
Иногда вам может понадобиться, чтобы определенный запроса выполнялся на основе другого условия. Например, вы можете захотеть применить where оператор только в том случае, если заданное входное значение присутствует во входящем HTTP-запросе. Вы можете сделать это, используя when метод:
Метод when выполняет данное замыкание только тогда, когда первый аргумент равен true. Если первый аргумент равен false, замыкание не будет выполнено.
Вы можете передать другое замыкание в качестве третьего аргумента when метода. Это замыкание будет выполняться только в том случае, если первый аргумент оценивается как false. Чтобы проиллюстрировать, как можно использовать эту функцию, мы будем использовать ее для настройки порядка запросов по умолчанию:
Связи (Relations)
В данный момент поддерживается 3 вида связей
- hasOne - один к одному
- hasMany - один ко многим
- hasManyThrough - многие ко многим
Один к одному (hasOne)
3 параметра, имя класса, внешний и внутренний ключ
Внешний и внутренний ключ определяются автоматически, за исключением когда имена полей не совпадают с именем класса или если связь обратная belongsTo (Возможно в будущем это будет реализовано)
Один ко многим (hasMany)
3 параметра, имя класса, внешний и внутренний ключ
Внешний и внутренний ключ определяются автоматически, за исключением когда имена полей не совпадают с именем класса
Многие ко многим (hasManyThrough)
5 параметров, имя конечного класса, имя промежуточного класса, внешние и внутренние ключи
Внешние и внутренние ключи определяются автоматически, за исключением когда имена полей не совпадают с именами классов
Жадная загрузка (Eager load)
По умолчанию все связи с ленивой загрузкой (lazy load)
Связь не будет загружена до тех пор, пока явно не будет вызвана
Для того чтобы жадно загрузить данные необходимо вызвать метод with и передать имена связей, которые требуется жадно загрузить
Жадная загрузка извлекает данные используя всего несколько запросов. Это позволяет избежать проблемы N + 1.
Представьте, что у вас есть этот код, который находит 10 сообщений, а затем отображает имя автора каждого сообщения.
Без ленивой загрузки при каждой итерации цикла было бы обращение в файловую систему для получения данных, то есть 1 запрос на получение списка постов и 10 на получение пользователей
Жадная загрузка избавляет от этой проблемы, 1 запрос на получение списка постов и 1 на получение пользователей этих постов
Миграции
Для вызова класса миграции необходимо в конструктор передать нужную нам модель
Создание таблицы
Создание таблицы, пример создания файла test.csv с пятью полями
Удаление таблицы
Создание колонок
Переименовывание колонок
Удаление колонок
Проверка существования таблицы/колонки
All versions of motor-orm with dependencies
ext-mbstring Version *