Модели и миграции
<?
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
ORM Foton
step 1 ($tb — название таблицы)
create($tb=null) – создание таблицы
insert($tb=null) – запись в таблицу
table($tb=null,$f=null) – вывод из таблицы, $f (fields) – поля для вывода, если не указан выводятся все поля
d($tb=null) — удаление записи
trun($tb=null) — очистка таблицы
up($tb=null,$p=null) — обновление таблицы, $p строка запроса типа «поле='значение',поле='значение'»
drop($tb=null) – удаление таблицы
step 2 ($p – название поля)
where($w=null,$and=null,$group=null) выборка значений (условие если)
$w – строка типа «поле=значение» или массив array(“поле“=>”значение“)
ключ может содержать маску:
array(“!id“=>5) – id!=5
array(“>p“=>5,”<s”=>7) – p>5 и s <7
array(“%text“=>'слово') – text содержит 'слово'
array(“^text“=>'слово') – text начинается с 'слово'
array(“$text“=>'слово') – text заканчивается 'слово'
array(“!text“=>'слово') – text не содержит 'слово'
$and – и,или, по умолчанию «и»
$group – 1 вместо where выражение закрывается в скобки (поле1=2 and поле2='text'), используется только вместе с where(),orf(),andf()
2 - вместо where выражение остается без изменений, используется только вместе с where(),orf(),andf()
where() - добавляет в запрос WHERE
andf() - добавляет в запрос AND
orf() - добавляет в запрос OR
join($arr) – оператор JOIN (выполняет сравнение на соответствие условию между таблицами)
$arr – array('table1', //1 таблица
array('field1','field2'), // поля 1 таблицы поддерживает маски как в where- (!,<,>)
'table2', //2 таблица
array('field1','field2'), //поля 2 таблицы
'L'); //необязательное
I – inner join (по умолчанию)
L – left join
R – right join
O – outher join
C – cross join
F – full join
пример: array('role',array('id'),'user_inc',array('id'),'L');
return $this->core->table('role')->join($arr)->eq();
like($wp=null,$w=null) — более быстрый поиск like,
$wp – массив значений полей, либо строка с значением,
$w – массив полей, либо строка с полем
whereArr($wp=null,$w=null) - более быстрый поиск =,
$wp – массив значений полей, либо строка с значением,
$w – массив полей, либо строка с полем
insert_arr($arr=null) – массив значений для записи array('поле'=>'значение')
field($name,$value) – добавляет создание поля, работают все поля из настроек $FS→orm[драйвер]
*драйвер orm может быть lite,mysql,pgsql
key($p=null) — создает первичный ключ
limit($f=null,$limit=null,$prev=null) - сортировка DESC
$f – строка поле сортировки,
$limit – количество записей
$prev – номер записи с которой начать
limita($f=null,$limit=null,$prev=null) - сортировка ASC
$f – строка поле сортировки,
$limit – количество записей
$prev – номер записи с которой начать
lim($limit=null,$prev=null) сортировка DESC
$limit – количество записей
$prev – номер записи с которой начать
sorts($sp=null,$s=null)
$sp – поле сортировки
$s – сортировка asc или desc
one($p=null)
$p – поле сортировки, выводит одно значение, сортировка DESC
group($f=null)
группирует, $f – поле по которому произойдет группировка
Step 3
query() - выполняет запрос к базе данных
q() - выполняет запрос prepare – результат объект orm
forq($field_key,$field_value) - выполняет запрос результат массив значений, ключи поля таблицы, и номера, то есть структура вида array(0=>array(0=>1,id=>1,1=>text,name=>text));
Аргументы метода являются необязательными,
$field_key — строка(поле таблицы)
$field_value — строка или массив(поле или поля таблицы)
если они указаны, то выводится массив с ключами значениями поля $field_key и значениями равными значениям поля $field_value, если $field_value является массивом, то значением поля $field_key будет массив значений.
eq() - выводит строку запроса (для тестирования)
cq($echo=null) — выполняет создание таблицы с полями в формате InnoDB, кодировка utf8
c($count=null,$param=array()) - выводит количество затронутых строк в запросе:
$count - если указана переменная не null будет выполнен метод fetchColumn(), если не указана или null rowCount()
$param - если $param = ['S'=>true] - экранирование " не будет выполнено,
используется в основном для поиска в сериализованных или json данных
Основные методы работы с базой данных
Методы для работы с базой расположены в файлах mysql,pgsql,litesql для соответствующих систем хранения данных в директории /core/foton/module/orm
selectDB($table=null,$attr=null,$attr2=null,$echo=null)
$table — таблица
$attr — поле таблицы в условии WHERE
$attr2 — значение поля таблицы в условии WHERE
$echo — поля для вывода через ; или одно поле
Выводит массив данных значений полей таблицы
update($table=null,$arr=null,$where=null)
$table — таблица
$arr — Массив данных для обновление [поле=>значение]
$where — строка условия WHERE
del($table = null, $where)
Удаляет данные из таблицу по условию $where,
$table - таблица
$where — массив
[поле=>значение],[поле2=>значение],[(маска)поле3=>значение]
Маска может принимать следующие значения:
= - проверка равно или нет
> - проверка меньше
< - проверка больше
! - не равно
% - содержит значение
ins($table = null, $arr = null,$where = null)
Добавляет данные в таблицу $table из массива $arr по условию $where
fieldTable($table=null,$field=null)
$table — таблица
$field — поля для вывода
Выводит все строки полей таблицы
tableList()
Выводит названия всех таблиц
is($table=null)
$table — таблица
Проверяет есть ли таблица, возвращает true в случае успеха или false, если таблица не найдена
Работа с типами полей и полями таблицы
alter($arr)
$arr['key'],$arr['type'],$arr['table']
Меняет тип поля key на type
delete($arr)
$arr['field'],$arr['table']
Удаляет поле field в таблице table
altertype($arr)
$arr['field'],$arr['type'],$arr['table']
изменяет типы полей field на типы в массиве type таблицы table
rename($arr)
$arr['table'],$arr['oldfield'],$arr['newfield']
переименовывает столбец с oldfield на newfield
add($arr)
$arr['key'],$arr['type'],$arr['table']
Добавляет поле key с типом type
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
tableSortWhere($valtables=null,$id="id",$sort='DESC',$ceil='0',$w1=null,$w2=null)
Выводит данные из таблицы
$valtables — название таблицы
$id – поле сортировки
$sort — тип сортировки
$ceil — если 0, сортируется как текст, если 1 как цифры
$w1 – поле проверки
$w2 – проверяемое значение для поля