Рубрика: laravel

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-систему у владельца компании есть сотрудники которые имеют доступ к системе и Вам необходимо чтобы несколько сотрудников выполняли разные функции или запретить экспорт базы данных клиентов.

Читать далее

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;
}

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

Как очистить кеш шаблонов в Laravel?

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

Route::post('/clear-cache', ['middleware' => ['auth', 'role:admin'], function () {
    $cachedViewsDirectory = app('path.storage') . '/framework/views/';
    if ($handle = opendir($cachedViewsDirectory)) {
        while (false !== ($entry = readdir($handle))) {
            if (strstr($entry, '..')) {
                continue;
            }
            @unlink($cachedViewsDirectory . $entry);
        }
        closedir($handle);
    }
    return 1;
}]);

 


                                

Исправление ошибки при запуске команды db:seed

Содержимое ошибки

C:\xampp\php\php.exe artisan db:seed
[Illuminate\Database\QueryException]                                         
SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: '\xC  
A\xF3\xF0\xFC\xE5\xF0...' for column 'name' at row 1 (SQL: insert into `cat  
egory` (`name`, `updated_at`, `created_at`) values ("���������� ������", 20  
16-09-14 14:49:44, 2016-09-14 14:49:44))

 

Чтобы исправить нужно изменить кодировку файла DatabaseSeeder.php с windows-1251 на utf-8

Установка Laravel 5

Предположим что мы уже установили composer.

Теперь настроим выполнение php из командной строки. Для этого перейдем в Мой компьютер->Свойства->Дополниельные параметры системы->Переменные среде->PATH->Изменить

Добавим путь к php. У меня он в папке «C:\xampp\php;», добавляем в конец.

Скачиваем последнюю версию фреймворка. Добавляем в необходимую папку. В этой папке выполняем команду «composer update». Все само загрузиться и установиться.

 

Делаем копию файла .env.example, и сохраняем как .env.

Выполняем команду «php artisan key:generate»

 

Создаем файл .htaccess в него записываем. Теперь при обращении к сайту будет транслироваться содержимое папки public.

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>