Для работы с моделями в системе реализован абстрактный класс system/core/model/model реализующий методы для работы с таблицами в базе данных.
Для работы с моделью необходимо создать в приложении его класс например app/models/users.php Имя класса должно совпадать с таблицей в базе данных. Например:
namespace app\models;
use system\core\model\model;
class users extends model
{
}
Для автоматического создания класса можно воспользоваться консольной командой:
php e create/model model_name
Методы класса:
Метод предназначен для установки значения from в запросе
Метод принимает до трёх параметров.
Если передан один параметр, то будет считаться что первые два параметра заменяются на 'id' и '=' соответственно, это будет равнозначно запросу:
$id = 1;
$object->where('id', '=', $id)->get();
//Будет равнозначно
$object->where($id)->get();
Если в метод будет передано два параметра, то во второй параметр будет передан знак '=', это будет равнозначно:
$slug = 'test';
$object->where('slug', '=', $slug)->get();
//Будет равнозначно
$object->where('slug', $slug)->get();
Метод позволяет вызывать его в цепочке несколько раз:
$object->where('name', 'test')->where('age', 32)->get();
В качестве параметра принимает имя столбца в таблице которое должно иметь значение null
$object->whereNull('email')->all();
В качестве параметра принимает имя столбца таблицы которое не должно иметь значение null.
$object->whereNotNull('name')->all();
Метод позволяет делать выборку по нескольким значениям, в качестве параметров принимает имя столбца таблицы и массив значений
$arr = [1, 2, 3];
$object->whereIn('id', $arr)->all();
Метод позволяет вставлять произвольный sql, например:
$object->where('id', '>', 100)->whereStr('AND `name` = :name', ['name' => 'test'])->all();
В качестве параметров принимает sql строку и массив значений для биндинга. Метод позволяет вставлять сложные условия.
Метод позволяет делать объединения таблиц по условию. Принимает три параметра:
$user = users::where(1)->leftJoin('user_contacts', 'users.contacts', 'user.id')->get();
Методы позволяют реализовать разбивку на страницы в запросах. Метод pagin ставится в цепочке, в качестве параметра принимает число - количество элементов на странице, по умолчанию это значение свойства $_limitDirection
Метод pagination возвращает массив данных для формирования пагинации в шаблоне.
$users = users::pagin();
$this->data['pagin'] = $users->pagination();
$this->data['users] = $users->all();
Select по умолчанию имеет значение - "*". В качестве параметра принимает строку.
Устанавливает значение для LIMIT, принимает в качестве аргумента строку.
Устанавливает значения для ORDER BY. В качестве значений принимает два параметра:
$users = users::sort('asc', 'date_create')->all();
Считает количество найденных строк. Возвращает целое число.
$count = users::where('active', 1)->count();
Возвращает результат суммирования по столбцу. В качестве параметра принимает имя столбца.
$summ = orders::where('user_id', 1)->summ('price');
Возвращает все совпадения в виде массива.
$users = users::all();
Возвращает первое совпадение в виде объекта.
$user = users::where(1)->get();
В качестве параметра принимает значение идентификатора, возвращает объект.
$user = users::find(1);
Формирует запрос для вставки строки в таблицу. В качестве параметра принимает массив значений.
$data = [
'name' => 'test',
'email' => 'test@test.test',
'password' => '123456',
];
users::insert($data);
Создаёт запрос для обновления значений в таблице.
В качестве параметра принимает массив значений.
$data = [
'id' => 1,
'name' => 'test',
'email' => 'test@test.test',
'password' => '654321',
];
users::update($data);
Значение идентификатора можно определить по условию
$data = [
'name' => 'test',
'email' => 'test@test.test',
'password' => '654321',
];
users::where(1)->update($data);
Сохраняет текущее состояние объекта.
$user = users::find(1);
$user->name = "test2";
$user->save();
Формирует запрос удаления строки.
//Удаление экземпляра объекта
$user = users::find(1);
$user->delete();
//Удаление по id
$userId = 1;
users::delete($userId);
Удаление по условию
users::where('active', 0)->delete();