afstellar / af-stellar-core
Lightweight MVC core with ORM, Migrations and Query Builder
Requires
- php: ^7.3
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2025-07-11 15:52:51 UTC
README
Developer / Разработчик
*Andre Moore*
Requirements / Требования
- PHP 7.3 or higher / PHP 7.3 или выше
- MySQL database / База данных MySQL
Configuration Setup / Настройка конфигурации
Description / Описание:
Using the Config Class / Использование класса Config The framework provides a simple configuration system through the App\Core\Config class. Фреймворк предоставляет простую систему конфигурации через класс App\Core\Config
Config::init([ 'DB_HOST' => '127.0.0.1', 'DB_NAME' => 'app_db', 'DB_USER' => 'app_user', 'DB_PASS' => 'secure_password' ]);
Base Classes / Базовые классы
app\Core\Model:
Description / Описание:
The Model. Base class inherited by all models /
Модель. Базовый класс, который наследуют все модели
Properties / Свойства:
protected static $table
- representation or table associated with the model / представление или таблица, с которой связана модельprotected $fillable
- array of table fields mapped to the model / массив полей таблицы, отображенный в моделиprotected $relations
- array of related model data obtained through relationships / полученный массив данных моделей связанных отношениямиprotected $joined
- array of data obtained through table joins / полученный массив данных полученных с помощью join присоединения таблицprotected $exists
- indicates whether model data exists in the database / отображение существования данных модели в БДprotected static $columnTypes
- array of data types for$fillable
fields / массив типов данных полей$fillable
в таблице модели
Methods / Методы:
getColumnTypes()
- get$columnTypes
/ получение$columnTypes
getColumnType($column)
- get data type for specific field / получение типа данных для определенного поляquery()
- execute database query viaQueryBuilder
/ выполнение запроса к бд черезQueryBuilder
getFillable()
- get all$fillable
/ получение всех$fillable
fill(array $values)
- mass attribute assignment / массовое заполнение атрибутовsave()
- save new model to database / сохранение новой модели в бдupdate(array $attributes)
- update model in database by id / обновление модели в бд по iddelete()
- delete model from database by id / удаление модели из бд по idall()
- get all class instances from database / получение всех экземпляров класса из бдfind($value, $name = 'id')
- get specific class instance from database / получение конкретного экземпляра класса из бдhasMany($related, $foreignKey = null, $localKey = 'id')
- basic model relationship implementation / базовая реализация отношений моделейbelongsTo($related, $foreignKey = null, $ownerKey = 'id')
- basic model relationship implementation / базовая реализация отношений моделей
app\Core\QueryBuilder:
Description / Описание:
Query Builder. Base class used in model objects and DB facade /
Построитель запросов. Базовый класс, используется в объектах модели и фасаде DB
Methods / Методы:
select($columns = ['*'])
- specify fields to select / указание полей получаемых вSELECT
запросеwhere($column, $operator, $value = null)
-WHERE
condition / условиеWHERE
orWhere($column, $operator, $value = null)
-OR WHERE
condition / условиеOR WHERE
whereGroup(\Closure $callback)
- condition grouping function / использование функции группировки условийorWhereGroup(\Closure $callback)
- condition grouping function / использование функции группировки условийwhereIn($column, array $values)
-WHERE IN
condition / условиеWHERE IN
whereNull($column)
-WHERE NULL
condition / условиеWHERE NULL
whereNotNull($column)
-WHERE NOT NULL
condition / условиеWHERE NOT NULL
get()
- compile query and get data / компиляция запроса и получение данныхjoin($table, $first, $operator = null, $second = null, $type = 'INNER')
-INNER JOIN
leftJoin($table, $first, $operator = null, $second = null)
-LEFT JOIN
rightJoin($table, $first, $operator = null, $second = null)
-RIGHT JOIN
first()
- get first row of query / получение первой строки запросаlimit($limit)
-LIMIT
clause / условиеLIMIT
offset($offset)
-OFFSET
clause / условиеOFFSET
insert(array $data)
- insert data into database / добавление данных в бдupdate(array $data)
- update data in database / обновление данных в бдdelete()
- delete from database / удаление из бдorderBy($column, $direction = 'ASC')
- sorting / сортировкаtoRawSql()
- compile query to SQL string / компиляция запроса и вывод в sql строкуtoRawSqlData()
- compile query to SQL string with data / компиляция запроса и вывод в sql строку с подставленными даннымиselectRaw($expression, $bindings = [])
- raw SQL for custom field inSELECT
/ sql строка для произвольного поля вSELECT
whereRaw($sql, $bindings = [])
- raw SQL for customWHERE
condition / sql строка для произвольного условияWHERE
app\Core\DB:
Description / Описание:
DB Facade. Base class for database queries without model, returns array /
Фасад DB. Базовый класс, построение запросов к бд без указания модели, ответ выводится в массив
Properties / Свойства:
protected static $connection
- database connection (default - main DB) / подключение к бд (базовое - основная бд)
Methods / Методы:
setConnection(PDO $connection)
- establish database connection / установление подключения к бд, если нужно подключиться к другой бдtable($table)
- select table for query / выбор таблицы для запросаraw($value)
- raw SQL query string / строка sql запросаselect($sql, $bindings = [])
-SELECT
query string and parameters / строкаSELECT
запроса и массив параметровinsert($sql, $bindings = [])
-INSERT
query string and parameters / строкаINSERT
запроса и массив параметровupdate($sql, $bindings = [])
-UPDATE
query string and parameters / строкаUPDATE
запроса и массив параметровdelete($sql, $bindings = [])
-DELETE
query string and parameters / строкаDELETE
запроса и массив параметров
app\Core\Controller:
Description / Описание:
Controller. Base class inherited by all controllers /
Контроллер. Базовый класс, наследуемый всеми контроллерами
Methods / Методы:
view($viewName, $data = [])
- render$data
in$viewName
view / вывод данных$data
в представление$viewName
json($data)
- output data in json format / вывод данных в json формате
app\Core\Collection:
Description / Описание:
Коллекция моделей. Обеспечивает удобную работу с наборами моделей
Methods / Методы:
all()
- получить все модели коллекцииfirst()
- получить первую модельlast()
- получить последнюю модельfilter(callable $callback)
- фильтрация коллекцииwhere(string $key, $value, bool $strict = true)
- фильтрация по атрибутуfirstWhere(string $key, $value)
- возвращает первый найденный элемент коллекцииsortBy(string $key, bool $ascending = true)
- сортировка по атрибутуkeyBy(string $key)
- установка значения как ключаchunk(int $size)
- забирает часть коллекцииpluck(string $key)
- получить массив значений атрибутаmap(callable $callback)
- преобразование коллекцииeach(callable $callback)
- итерация по коллекцииtoArray()
- преобразовать в массивgroupBy(string $key)
- группировка по ключуtoJson()
- преобразовать в JSONsave()
- сохранить все модели коллекцииdelete()
- удалить все модели коллекции
Migrations / Миграции
//Migration example / Пример миграции namespace App\Database\migrations; use App\Core\Database\Migration; class UserMigration extends Migration { public function up() { // Код миграции $this->createTable('users', function($table) { $table->increments('id'); $table->string('name'); $table->string('email'); $table->string('password'); $table->timestamps(); }); } public function down() { $this->dropTable('users'); } }
Migration Commands / Команды миграций
Executed within the app directory /
Выполняется внутри каталога app
Usage / Использование:
php migrate.php [command] [parameters]
php migrate.php [команда] [параметры]
Available commands / Доступные команды:
migrate - Run all pending migrations / Выполнить все новые миграции
rollback [steps] - Rollback migrations (default: 1) / Откатить миграции (по умолчанию 1)
create - Create new migration file / Создать новый файл миграции
help - Show this help message / Показать эту справку
Examples / Примеры
//all() User::all(); //first() User::first(); //find() User::find(10); //where() User::query()->where('name', 'John')->where('login', 'like', 'John%')->first(); //Generates query response / Сформирует ответ на запрос: "SELECT * FROM `users` WHERE `name` = 'John' AND `login` like 'John%' LIMIT 1" //whereIn() User::query()->whereIn('login', ['John', 'Doe'])->get(); //Generates query response / Сформирует ответ на запрос: "SELECT * FROM `users` WHERE `login` IN ('John', 'Doe')" //whereGroup() User::query()->whereGroup(function($query) { $query->where('name', 'John')->orWhere('login', 'John'); })->get(); //Generates query response / Сформирует ответ на запрос: "SELECT * FROM `users` WHERE (`name` = 'John' OR `login` = 'John')" //фасад DB DB::table('users')->where('id', '<', 5)->limit(2)->get(); //Returns array response for query / Сформирует ответ в виде массива на запрос: "SELECT * FROM `users` WHERE `id` < 5 LIMIT 2" //join() DB::table('users') ->leftJoin('posts as p', 'users.id', '=', 'p.user_id') ->where('users.id', 5) ->select(['users.*', 'p.code as post_code']) ->get(); //Returns array response for query / Сформирует ответ в виде массива на запрос: "SELECT `users`.*, `p`.`code` as `post_code` FROM `users` LEFT JOIN `posts` as `p` ON `users`.`id` = p.user_id WHERE `users`.`id` = 5" //update() DB::table('users')->where('id', 5) ->update(['login' => 'John']); //или User::find(5)->update(['login' => 'John']); // Фильтрация $activeUsers = User::all()->where('active', true); // Массовое обновление User::all() ->where('role', 'user') ->each(function($user) { $user->last_login = now(); }) ->save(); //view() - in controller / в контроллере namespace App\Controllers; use App\Models\User; class UserController extends Controller { public function index() { $users = User::all(); return $this->view('users', compact(['users'])); } //Other class methods / Другие методы класса } //Usage in code / Использование в коде: $userController = new UserController(); $userController->index();
Will render view Views\users.php
/ Выведет представление Views\users.php
If view is stored in Views\Users\index.php
, specify in view: $this->view('users.index', compact(['users']))
/
Если представление хранится в Views\Users\index.php
, то во view указывается $this->view('users.index', compact(['users']))