Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 6/7/8/9/10/11 » Валится скрипт » 12.06.2025 10:33:18

Спасибо. Буду пробовать. А

Illuminate\Support\Facades\Retry

в api я не нашёл. По крайней мере для 12 версии.

#2 Re: Laravel 6/7/8/9/10/11 » Валится скрипт » 11.06.2025 15:55:42

SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

Вот что пишет.

#3 Re: Laravel 6/7/8/9/10/11 » Валится скрипт » 11.06.2025 15:54:25

Из консоли он вызывается, Планирование задач есть такой раздел.

#4 Re: Laravel 6/7/8/9/10/11 » Валится скрипт » 11.06.2025 15:52:42

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

#5 Re: Laravel 6/7/8/9/10/11 » Валится скрипт » 11.06.2025 15:29:01

Ещё момент обнаружил. Скрипт может отвалиться внезапно, сессия рвётся. И помогает повторный запуск скрипта вручную. Как можно отследить это? Если сессия отвалилась, то повторный раз запустить. Обернуть в try catch?

#6 Re: Laravel 6/7/8/9/10/11 » Валится скрипт » 10.06.2025 08:36:13

; в конце просто потому что таких запросов несколько. И вообщем ни на что не влияют. Через PDO тоже валится. Помогло только

set_time_limit(60 * 60 * 24);
ini_set('memory_limit', '5G');

в начале файла.

#7 Laravel 6/7/8/9/10/11 » Валится скрипт » 07.06.2025 11:26:07

pcheliakov
Ответов: 11

Добрый день.
Не могу понять из-за чего валится скрипт. Мне надо вытянуть данные из базы данных (очень большой). Тянется по крону ночью. Делал всё по гайду Laravel 12. Вот тут отваливается скрипт.

$tempnzWorkers = DB::connection('old_db')->select('SELECT `w`.`id`, `workdate`, `u`.`id` AS `user_id`, `workday`, `worknight`, `rate` FROM `tempnz_workers` AS `w` INNER JOIN `sysusers` AS `u` ON `u`.`tabnumber` = `w`.`tabnumber` INNER JOIN `rates` AS `r` ON `w`.`rate` = `r`.`id`;');

Таблица 3 318 635 строк. 5.2GB. Причём если указать фильтр по году (есть такой столбец), то отрабатывает. Но мне нужна вся таблица. Просто вылетает скрипт, ничего не пишет. Логов нет. Просто не понимаю чего не хватает. Если этот же запрос запустить через консоль, HeidiSql - за полчаса отрабатывает. Долго конечно, но хотя-бы...
Какая методика поиска ошибки?

#8 Re: Laravel 6/7/8/9/10/11 » Сложная валидация » 12.05.2025 13:05:23

Да, спасибо. Сам наколхозил уже. Вот. Просто у меня 3 разных модели с одной и той же проверкой.

<?php

namespace App\Rules;

use App\Models\{AppointmentHist, DivisionHist, KontrpostHist};
use Closure;
use Illuminate\Contracts\Validation\{DataAwareRule, ValidationRule};

class CheckDateRange implements DataAwareRule, ValidationRule
{
    private const LIST_CLASSES = ['myappointment' => AppointmentHist::class, 'mydivision' => DivisionHist::class, 'mykontrpost' => KontrpostHist::class];

    /**
     * Все данные находятся на проверке.
     *
     * @var array<string, mixed>
     */
    protected $data = [];

    /**
     * Установите данные для проверки.
     *
     * @param  array<string, mixed>  $data
     */
    public function setData(array $data): static
    {
        $this->data = $data;
        return $this;
    }

    /**
     * Run the validation rule.
     *
     * @param  \Closure(string, ?string=): \Illuminate\Translation\PotentiallyTranslatedString  $fail
     */
    public function validate(string $attribute, mixed $value, Closure $fail): void
    {
        $maxDate = self::LIST_CLASSES[array_key_first(array_intersect_key($this->data, self::LIST_CLASSES))]::where('id_user', (int) $this->data['id_user'])->where('id', '!=', (int) $this->data['id'])->max('edate');
        if (isset($maxDate) && (\DateTime::createFromFormat('Y-m-d', $value) <= \DateTime::createFromFormat('Y-m-d', $maxDate))) {
            $fail('validation.checkdaterange')->translate();
        }
    }
}

#9 Laravel 6/7/8/9/10/11 » Сложная валидация » 04.05.2025 15:24:33

pcheliakov
Ответов: 2

Добрый день. Недавно перешёл с Yii2 на laravel. Пока не знаю как сделать проверку/валидацию.

Если таблица с пользователями, таблица с должностями. Справочные таблицы. Есть линковочная табл. с Историей должностей сотрудников. Там соответсвенно id_user, id_appointment, bdate (дата начала), edate (дата окончания). Многие ко многим.

Так вот при переводе, вставке новой записи, надо проверить что новая дата перевода (bdate) не меньше или равна максимальной дате окончания (edate) предыдущих переводов (а их может не быть вообще если чел. новый или несколько записей в бд). Если меньше или равна - выдать текст ошибки. Иначе сохранить и всё хорошо. Это кастомная валидация я так понимаю?

Подвал раздела