Active Record в yii2

Связанные данные

Чтобы связать две таблицы в yii используются методы hasOne() и hasMany() в моделях, на примере видно как именно это работает.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Company extends ActiveRecord
{
public static function tableName()
{
return 'customer_company';
}
// Связываем с таблицей pr_site
public function getSite()
{
return $this->hasMany(Site::className(), ['customer_company_id' => 'customer_id']);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Site extends ActiveRecord
{
public static function tableName()
{
return 'pr_site';
}
// Связываем с таблицей customer_company
public function getCompany()
{
return $this->hasOne(Company::className(), ['customer_id' => 'customer_company_id']);
}
}
1
2
$site = Site::findOne($id);
var_dump($site->company);

Абстрактный пример, необходимо связать класс M и N связью один к одному.
В классе M пишем: $this->hasOne('N', ['столбец_из_таблицы_N' => 'столбец_из_таблицы_M']);
В классе N пишем: $this->hasOne('M', ['столбец_из_таблицы_M' => 'столбец_из_таблицы_N']);

Подробнее…

SQL запросы

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// возвращает набор строк. каждая строка - это ассоциативный массив с именами столбцов и значений.
// если выборка ничего не вернёт, то будет получен пустой массив.
$posts = Yii::$app->db->createCommand('SELECT * FROM post')
->queryAll();
// вернёт одну строку (первую строку)
// false, если ничего не будет выбрано
$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=1')
->queryOne();
// вернёт один столбец (первый столбец)
// пустой массив, при отсутствии результата
$titles = Yii::$app->db->createCommand('SELECT title FROM post')
->queryColumn();
// вернёт скалярное значение
// или false, при отсутствии результата
$count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM post')
->queryScalar();
// ----- привязки параметров -----
$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status')
->bindValue(':id', $_GET['id'])
->bindValue(':status', 1)
->queryOne();
// ----- альтернативный путь привязки параметров -----
$params = [':id' => $_GET['id'], ':status' => 1];
$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status')
->bindValues($params)
->queryOne();
$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status', $params)
->queryOne();
// ----- экранирование имён таблиц и столбцов -----
// Для написания независимого от БД кода необходимо использовать следующий синтаксис экранирования используемый в Yii:
// [[column name]]: заключайте имя столбца в двойные квадратные скобки;
// {{table name}}: заключайте имя таблицы в двойные фигурные скобки.
$count = Yii::$app->db->createCommand("SELECT COUNT([[id]]) FROM {{employee}}")
->queryScalar();

Подробнее…

Разное

$clientModel->toArray() - конвертируем из объекта в массив результат выборки из БД

При написании независимого от базы данных кода, правильно экранировать имена таблиц и столбцов довольно трудно, так как в разных базах данных правила экранирования разные. Чтоб преодолеть данную проблему вы можете использовать следующий синтаксис экранирования используемый в Yii:

[ [column name] ]: заключайте имя столбца в двойные квадратные скобки;
{ {table name} }: заключайте имя таблицы в двойные фигурные скобки.

Миграции в yii2

Консольные команы (подробнее):

  1. yii migrate/create <name> - создаст миграцию
  2. yii migrate/create **create_**news**_table** - создаст миграцию с кодом для создания таблицы news
  3. yii migrate - выведет список всех миграций, которые не применялись до сих пор и спросит выполнить ли их.
  4. yii migrate 3 - явно указывает сколько миграций необходимо применить к БД.
  5. yii migrate/to 150101_185401 - с помощью временной метки указывает какую миграцию применить.
  6. yii migrate/down - отменяет самую последнюю применённую миграцию
  7. yii migrate/down 3 - отменяет 3 последних применённых миграции
  8. yii migrate/redo - перезагрузить последнюю применённую миграцию
  9. yii migrate/redo 3 - перезагрузить 3 последние применённые миграции
  10. yii migrate/history - показать последних 10 применённых миграций
  11. yii migrate/history 5 - показать последних 5 применённых миграций
  12. yii migrate/history all - показать все применённые миграции
  13. yii migrate/new - показать первых 10 новых миграций
  14. yii migrate/new 5 - показать первых 5 новых миграций
  15. yii migrate/new all - показать все новые миграции
  16. yii migrate/mark m150101_185401_create_news_table - Вместо применения или отката миграций, есть возможность просто отметить, что база данных была обновлена до определенной миграции. Указывается временная метка или полное имя миграции.

Методы в миграциях

Документация по классу yii\db\Migration, в частности тут можно посмотреть какие типы можно использовать при написании миграций:

  • bigInteger() - Соответствует в SQL типу: BIGINT (8 байт) - целое число от -263 до 263-1).
  • binary() - Соответствует в SQL типу: LONGBLOB и BLOB. BLOB ( 216-1 символов) используется для хранения текста, изображений, звука, электронных документов и т.д.
  • boolean() - Соответствует в SQL типу: tinyint(1)
  • char() - Соответствует в SQL типу: CHAR(n) позволяет хранить строку фиксированной длины n. Значение n - от 0 до 65535.
  • date() - Соответствует в SQL типу: DATE (3 байта) от ‘1000-01-01’ до ‘9999-12-31’
  • dateTime() - Соответствует в SQL типу: DATETIME (8 байт) значение вводится и хранится в формате - YYYY-MM-DD hh:mm:ss.
  • decimal() - Соответствует в SQL типу: DECIMAL (M,D) или DEC (M,D) или NUMERIC (M,D) Используются для величин повышенной точности, например, для денежных данных. M - количество отводимых под число символов (максимальное значение - 64). D - количество знаков после запятой (максимальное значение - 30). Пример: DECIMAL (5,2) - будет хранить числа от -99,99 до 99,99.
  • float() - Соответствует в SQL типу: FLOAT (M,D) (4 байта) M - количество отводимых под число символов. D - количество символов дробной части.
  • double() - Соответствует в SQL типу: DOUBLE (M,D) (8 байта)
  • smallInteger() - Соответствует в SQL типу: tinyint (1 байт) - хранит любое число в диапазоне от -128 до 127.
  • string() - Соответствует в SQL типу: VARCHAR
  • text() - Соответствует в SQL типу: TEXT MEDIUMTEXT LONGTEXT
  • time() - Соответствует в SQL типу: TIME (3 байта) от ‘-838:59:59’ до ‘838:59:59’
  • timestamp() - Соответствует в SQL типу: TIMESTAMP (4 байта) от ‘1970-01-01 00:00:00’ до ‘2037-12-31 23:59:59’
  • money() - Соответствует в SQL типу: DECIMAL(19,4)

addForeignKey ($name, $table, $columns, $refTable, $refColumns, $delete = null, $update = null) - добовляем внешний ключь (в SQL оператор FOREIGN KEY), служит для указания в одной таблице на Первичный ключ в другой.
$name - название внешнего ключа, название формируется так: fk-текущаяТаблица-полеТекущейТаблицы
$table - текущая таблица
$columns - поле внешнего ключа текущей таблицы
$refTable - внешняя таблица
$refColumns - первичный ключ внешней таблицы
$update - действие при обновлении (аналогично с $delete)
$delete - действие при удалении записи
(Каскадные ограничения ссылочной целостности: https://technet.microsoft.com/ru-ru/library/ms186973(v=sql.105).aspx ):

  • CASCADE - при попытке удалить строку с ключом, на которую ссылаются внешние ключи в строках других таблиц, все строки, содержащие эти внешние ключи, также должны быть удалены.
  • NO ACTION и RESTRICT - при попытке удалить строку с ключом, на которую ссылаются внешние ключи в строках других таблиц, нужно сообщить об ошибке, а для инструкции DELETE выполнить откат.
  • SET DEFAULT - все значения, составляющие эти внешние ключи, должны быть изменены на значения по умолчанию. Чтобы выполнялось это ограничение, для всех столбцов внешних ключей целевой таблицы должно быть определено значение по умолчанию.
  • SET NULL - Указывает, что при попытке удалить строку с ключом, на которую ссылаются внешние ключи в строках других таблиц, все значения, составляющие эти внешние ключи, должны быть изменены на NULL. Чтобы выполнялось это ограничение, все столбцы внешних ключей целевой таблицы должны допускать значение NULL.

По умолчанию ставится RESTRICT

Шпора по командам терминала

Консольные команды для Linux

  • chmod 777 -R blog - рекусивно меняем права у папки blog
  • chown -R pi:root blog - рекурсивно меняем владельца у паки blog на pi и группу на root
  • rm -R blog - Удалить папку blog (рекурсивно)
  • rm -R * - Удалить все содержимое текущей папки (рекурсивно)
  • mkdir blog - Создать директорию blog
  • stat blog - Подробная информация о файле/директории
  • mv - Переместить или переименовать файлы
  • nslookup ya.ru - DNS-клиент позволяющий узнать ip адресс сайта и не только

ls - Показать файлы и папки (ls -la - показать все (в том числе скрытые) файлы и папки в табличном виде).

  • -a - показать все (в том числе системные и скрытые файлы и директории)
  • -l - показать в табличном виде:
    • Права доступа
    • Количество ссылок на файл
    • Имя владельца
    • Имя группы
    • Размер файла в байтах
    • Время последней модификации файла
    • Имя файла/директории
      Пример: drwxr-xr-x 15 Falbin staff 510 14 окт 22:59 blog

df - команда выводит размер, а так же свободное и занятое место на всех смонтированных (подключенных) файловых системах.

SQL

  • mysql -h host -u user -p - Подключится к серверу MySQL.
  • /Applications/MAMP/Library/bin/mysql -h localhost -u root -p - Вход в интерфейс командной строки MySQL для MAMP в MAC OS
  • show databases; - Показать все БД
  • use name_database; - Подключение к БД

Импорт базы данных (подходит для тяжелых дампов)

  1. mysql -u root -p - Подключится к серверу MySQL (пользователь root).
  2. use db_name - Подключаемся к БД (если бд нет, необходимо сначала создать БД для импорта).
  3. source db_name.sql - Делаем импорт файла в выбранную БД (вместо db_name.sql вводим название файла дампа БД или путь до файла).

Экспорт базы данных
mysqldump -u root -p otrs > /var/www/otrs.sql - делает дамп базы otrs в файл /var/www/otrs.sql

Raspberry pi

  • vcgencmd measure_temp - температура процессора
  • cat /proc/version - показывает, какую версию Pi Вы используете
  • cat /proc/partitions - показывает размер и количество разделов на Вашей карте SD или HDD
  • omxplayer -o local name.mp4 - воспраизвести видео в консольном проигрователе. -o local означает что звук должен выходить на стандартный разъем 3.5 (а не через HDMI). Подрорбные статьи о omxplayer: elinux.org и isearch.kiev.ua
  • xserver-command=X -s 0 -dpms - отключает затухание экрана, теперь экран будет показывать все время до перезагрузки. Чтобы отключить затухание экрана навсегда необходимо в конфиге /etc/lightdm/lightdm.conf после строчки [SeatDefaults] добавить нашу команду: xserver-command=X -s 0 -dpms

MAC OS

  • say "текст" - воспроизводит написанный текст.
  • say -o savedaudio.aiff -f имя-файла.txt - превращает текстовой файл в аудио-книгу. Отконвертирует файл и сохранит его в текущей директории с именем savedaudio.aiff.

  • defaults write com.apple.Finder AppleShowAllFiles -bool true - включить скрытые и системные файлы.

  • defaults write com.apple.Finder AppleShowAllFiles -bool false - выключить скрытые файлы и папки.
    killall Finder - чтобы изменения вступили в силу надо перезапустить Finder

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - Устанавливает Homebrew, сторонний пакетный менеджер для OS X
brew install tree - Теперь можем использовать в MAC OS команду tree
brew install mc - Устанавливает файловую оболочку mc


Наброски

sudo restart vsftpd - перезагрузка ftp сервера
service vsftpd restart