Модели и миграции
<?
namespace Model\Site;
class названиемодели extends \Foton\Model
{
public function name(){
return 'описание';
}
public function sections(){
$arr = array('таблица'=>'описание');
return $arr;
}
public function таблица_chmod(){
return [1,2];
}
public function blocking(){
$arr = [
'all' =>[2],
'update'=>[1,2],
'insert'=>[2],
'delete'=>[1],
'select'=>[2]
];
return $arr;
}
public function blockingnews(){
$arr = [
'all' =>[2],
'update'=>[2],
'insert'=>[2],
'delete'=>[2],
'select'=>[2]
];
return $arr;
}
public function interfaces(){
$arr = [
"news(название таблицы)" => [
"field" => ["id", "name", "href", "description","img","status"],
"name" => ["id", "Название", "Ссылка", "Описание","Фото","Статус"],
"format_select"=>["hidden","input","html","translit:name","img:img","checkbox"],
"format" => ["int", "text", "text", "text", "text", "text"],
"delete" => "deleteFotonElement",
"key" => "id"
]
];
return $arr;
}
}
* Для mysql:
'text'=>'text(64300) NOT NULL',
'int'=>'int(70) NOT NULL',
'date'=>'DATE NOT NULL',
'bit'=>'BIT NOT NULL',
'poly'=>'POLYGON NOT NULL',
'real'=>'REAL NOT NULL',
'time'=>'TIME NOT NULL',
'medium'=>'mediumtext NOT NULL'
** все типы данных вы можете посмотреть по ссылке: вашдомен/lists/html/html в поле «Код»
В директории /app/model/site/events мы можем создать директорию по названию модели
А внутри директории создаем файл по названию таблицы, например news.php
<?
namespace Model\Site\Events\news;
class news
{
public function before_update($arr){
$arr['event'] = [
'require' => ['name'=>'alert','href'=>'alert'],
'is' => ['href'=>['abc09','fields']],
'valid' => ['name'=>'input'],
'update' => ['name'=>'test'],
'text' => 'Не заполнено поле [name]',
'textis' => 'Формат поля [name] должен быть [validate]'
];
return $arr;
}
public function after_update($arr){
return $arr;
}
public function before_insert($arr){
$arr['event'] =
[
'require' => ['name'=>'alert','href'=>'alert'],
'is' => ['href'=>['abc09','alert']],
'text' => 'Не заполнено поле [name]'
];
return $arr;
}
public function before_get($arr){
return $arr;
}
}
* Методы обработки предупреждений находятся в классе dev/notice.php
alert,log,fields
** значениями массива могут быть:
number — проверяет является ли числом
abc09 — проверяет содержит ли только русские, латинские буквы и цифры
***значениями массива могут быть:
html — эквивалент htmlspecialchars
input — максимально безопасный способ, убирает все теги и использует html
decode — декодирует html
encode — кодирует html
number — удаляет все кроме цифр
text — удаляет все кроме русских, латинских букв и пробелов
tags — удаляет html теги
abc09 — удаляет все кроме русских, латинских букв и цифр
Вертикальный шардинг
Вертикальный шардинг позволяет обращаться к разным базам данных для хранения и модификации отдельных таблиц, базы данных могут находится на разных серверах.
Для того, чтобы на вашем проекте начал работу вертикальный шардинг необходимо создать базу данных на текущем, либо на другом сервере и перенести в нее стандартные таблицы, которые устанавливаются по умолчанию при установке системы, это необходимо для обработки типов данных в выводе интерфейсов системы.
После этого в файле /dev/sharding.php напишите следующий код:
<?
$arr =
[
"site"=>
[
"html.mvc"=>
[
'host' =>'ваш хост',
"dbname"=>'ваша база',
"login"=>'ваш логин',
"pass"=>'ваш пароль'
]
],
"admin"=>
[
"interface([^/]+)/html"=>
[
'host' =>'ваш хост',
"dbname"=>'ваша база',
"login"=>'ваш логин',
"pass"=>'ваш пароль'
]
]
];
site – массив для публичной части, admin — массив для административной части и содержит он в ключах шаблоны регулярных выражений.
Вместо html.mvc - мы пишем название представления и формат представления. Все элементы массива необязательные, здесь вы можете указать любые ключи суперглобального массива и на данной странице они будут переопределены, либо появятся.
Тоже самое касается административной части, только здесь вы указываете путь как в строке браузера от домена без слеша, и можете использовать регулярные выражения, так как обработка подключений к вашей таблице часто бывает специфичной. Теперь все таблицы в модели html будут созданы в новой базе и выводится в публичную часть будут именно из нее.
Горизонтальный шардинг
Для включения горизонтального шардирования для таблицы достаточно добавить ее в настройки /core/setting/main.php
Например. Если мы хотим, чтобы таблица catalog была разбита на партиции по 50 строк и система работала с ними как с единой таблицей нам нужно раскомментировать настройку и добавить настройку в массив для нашей таблицы:
'sharding'=>['catalog'=>50],
Затем через консоль один раз необходимо выполнить 2 команды
php foton shard create - создаст новый индекс
php foton shard index - переиндексирует таблицы
CLI Foton
php foton replication import serv1(без указания обновит все) - полностью обновляет текущую базу из настроек /dev/sharding.php servers
php foton replication export serv1(без указания обновит все) - полностью обновляет базы из настроек /dev/sharding.php servers к текущей базе
php foton shard create - создаст новый индекс
php foton shard index - переиндексирует таблицы
php foton shard backward table - откатит индексацию таблицы table
php foton shard clear table - очистит партиции таблицы table
php foton shard upindex table - обновит индексы таблицы
php foton migrate action - запустит все необработанные миграции
php foton migrate diff info - покажет все миграции модели info
php foton migrate rollback - откатит все миграции
php foton migrate type - вывод типов данных
php foton migrate add info test altertype name int,text - создаст миграцию модели info таблице test изменения типа поля name на тип text, типы вы можете посмотреть используя команду php foton migrate type или же в файле /core/setting/custom.php в массиве orm→ваша система хранения данных, также доступны drop,create,add,delete,rename,down,up
php foton migrate add info test drop – удалит все миграции таблицы test
php foton migrate add info test create – создаст таблицу test
php foton migrate add info test add name text – создаст поле name в таблице test с форматом text
php foton migrate add info test delete name - удалит поле name в таблице test
php foton migrate add info test rename name newname - переименует поле name в поле newname в таблице test
php foton migrate add info test up – создаст кастомную миграцию для исполнения для таблицы test
php foton migrate add info test down – создаст кастомную миграцию для отката up для таблицы test, файл перед миграцией можно
отредактировать в директории /system/migrations/site(директория вашего сайта)
php foton migrate addr info test altertype - создаст rollback модели info таблице test изменения типа, таже доступны drop,create,add,delete,rename,down,up
php foton migrate addrollback info test - создаст общий rollback для таблицы test
php foton migrate migrate info test - создаст общую миграцию для таблицы test
php foton migrate create test interfaces - создаст таблицу test и rollback
Основные методы работы с базой данных
Для самостоятельной работы с миграциями используйте
use Foton\Module\Face\BasicOperation;
create($table,$interfaces)
Передается название таблицы и массив таблицы из метода интерфейса модели
Метод создает таблицу с указанными в методе интерфейса полями, если таблица уже существует выведет false
add($table,$arr)
Передается название таблицы и массив ['название поля'=>'тип поля']
Добавляет поле в таблицу
delete($table,$arr)
Передается название таблицы и массив ['название поля'=>'тип поля']
Удаляет поле из таблицы
rename($table,$arr)
Передается название таблицы и массив ['старое название поля'=>'новое название поля']
Переименовывает поле в таблице
altertype($table,$arr)
Передается название таблицы и массив ['название поля'=>['старый формат'=>'новый формат']]
Меняет формат поля в таблице
Для работы с CRUD методами используйте
use Foton\Module\App\Admin для административной части
use Foton\Module\App\Site для публичной части сайта
update($table,$arr,$where) - обновляет данные из массива $arr по условию $where
insert($table = null,$arr = null,$key='id') - добавляет данные в таблицу из массива $arr, $key - ключ таблицы
create($table = null,$arr = [],$key='id') - добавляет поля в таблицу из массива $arr, $key - ключ таблицы
delete($table = null, $where = []) - удаляет данные из таблицы по условию $where
getlist($arr) - выводит данные из таблицы аналогично $this->core->getlist()
count($arr) - выводит количество записей из тадлицы, содержит ключи table - имя таблицы и where - условие выборки (необязательное)
Расширенные методы для работы с таблицей
tableField($table)
$table — таблица
Выводит все поля таблицы
siteDump($dump = null, $arrNoDel = null)
$dump – если true сохранит, иначе выведет ошибку
$arrNoDel – массив таблиц, которые не нужно записывать в файл
Создается бекап сайта с базой данных и сохраняет их в архив по пути
$FS->backup
sqlDumpFile($file=null,$tableNo=null)
$file – путь к файлу, куда будет загружен дамп базы
$tableNo – массив таблиц, которые не нужно записывать в файл
Создается бекап базы данных
fileInsert($file=null)
выполняет запись в базу данных из файла
$file – путь к файлу дампа базы данных
copyTable($table1,$table2)
Копирует таблицу $table1 в таблицу $table2 без переноса данных
copyDateTable($table1,$table2)
Переносит данные из таблицы $table1 в таблицу $table2
renameTable($table1,$table2)
Переименовывает таблицу $table1 в $table2
selectId($table = null, $field = null, $id = null)
Выводит поля массива $field из таблицы $table записи с id==$id