Рубрика: PHP

Laravel 5.6. Monolog хранения логов в базе данных.

Данная статья не является полноценным переводом, для меня она является руководством по размещению логов в базу данных. Надеюсь кому-то она еще поможет, решить данную проблему. Если будут вопросы, пишите в комментариях, будем вместе разбираться.

Итак проблема: запись логов в базу данных.

В Laravel в коробочном решении есть логгер «Monolog». Фреймворк и библиотека позволяет нам написать собственный обработчик логов, но информации, как всегда, в русскоязычной сети недостаточно. Поиск привел меня на статью, с помощью которой мне удалось решить данную проблему, и я решил поделиться с Вами.

Читать далее

Laravel. Вывод SQL запроса.

Для отладки SQL запроса требуется посмотреть, какой запрос выполняется решение для Laravel ниже

 

$data->where(...);
$sql = $data->toSql();
$bindings = $data->getBindings();
foreach ($bindings as $binding) {
    $value = is_numeric($binding) ? $binding : "'".$binding."'";
    $sql = preg_replace('/\?/', $value, $sql, 1);
}
echo $sql;

Выведет примерно следующее.

select * from `conversions` where exists (select * from `landings` inner join `visits` on `landings`.`id` = `visits`.`landing_id` where `conversions`.`id` = `visits`.`id` and `landings`.`id` = 1) and `date` >= '2017-01-03' limit 15

 

Laravel. Specified key was too long; max key length is 767 bytes.

Этот сбой произойдет потому что UNIQUE_INDEX на поле email требует 1020 байт (255 * 4).

 

[Illuminate\Database\QueryException]                                         
 SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t  
 oo long; max key length is 767 bytes (SQL: alter table `users` add unique `  
 users_email_unique`(`email`))                                                
                                                                              

                                                                              
 [PDOException]                                                               
 SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t  
 oo long; max key length is 767 bytes                                         

Для решения необходимо перейти в папку config, открыть файл database.php

Для типа базы данных mysql заменить кодировку с

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',

на

'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',

 

 

Права в Laravel 5. Часть 2.

В предыдущей статье ссылка, было написано как создать распределение прав пользователей и использование в роуторе и шаблоне. В этой стать хочу написать о том как присваивать пользователю права, а так же пример использования плагина jsTree для построения дерева прав.

Читать далее

Права в Laravel 5. Часть 1.

Хочу разобрать случай когда нужно выставлять права определенному пользователю. Например, Вы разрабатываете CRM-систему у владельца компании есть сотрудники которые имеют доступ к системе и Вам необходимо чтобы несколько сотрудников выполняли разные функции или запретить экспорт базы данных клиентов.

Читать далее

Joomla. Как сделать свой sitemap или карту сайта.

Карта сайта необходима не только для поисковых систем, но и  для пользователей.

Скорее всего Вы выберите уже существующий компонент, но данный способ поможет разгрузить систему от лишних запросов и установки новых компонентов.

В моем случае все же понадобилось установить плагин, который подключает php файл. Если нужен плагин напишите в комментариях выложу.

Читать далее

Laravel. Получить значения enum из таблицы

public static function getEnumValues($table, $column)
{
  $type = DB::select( DB::raw("SHOW COLUMNS FROM $table WHERE Field = '$column'") )[0]->Type;
  preg_match('/^enum\((.*)\)$/', $type, $matches);
  $enum = array();
  foreach( explode(',', $matches[1]) as $value )
  {
    $v = trim( $value, "'" );
    $enum = array_add($enum, $v, $v);
  }
  return $enum;
}

Передаются параметры: название таблицы и ячейка в которой содержится значение.