Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Спасибо. Буду пробовать. А
Illuminate\Support\Facades\Retry
в api я не нашёл. По крайней мере для 12 версии.
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Вот что пишет.
Из консоли он вызывается, Планирование задач есть такой раздел.
А можно же отслеживать скрипт, если завершился неудачей, запускать повторно его. Правда он может сутки работать.
Ещё момент обнаружил. Скрипт может отвалиться внезапно, сессия рвётся. И помогает повторный запуск скрипта вручную. Как можно отследить это? Если сессия отвалилась, то повторный раз запустить. Обернуть в try catch?
; в конце просто потому что таких запросов несколько. И вообщем ни на что не влияют. Через PDO тоже валится. Помогло только
set_time_limit(60 * 60 * 24);
ini_set('memory_limit', '5G');
в начале файла.
Добрый день.
Не могу понять из-за чего валится скрипт. Мне надо вытянуть данные из базы данных (очень большой). Тянется по крону ночью. Делал всё по гайду 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 - за полчаса отрабатывает. Долго конечно, но хотя-бы...
Какая методика поиска ошибки?
Да, спасибо. Сам наколхозил уже. Вот. Просто у меня 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();
}
}
}
Добрый день. Недавно перешёл с Yii2 на laravel. Пока не знаю как сделать проверку/валидацию.
Если таблица с пользователями, таблица с должностями. Справочные таблицы. Есть линковочная табл. с Историей должностей сотрудников. Там соответсвенно id_user, id_appointment, bdate (дата начала), edate (дата окончания). Многие ко многим.
Так вот при переводе, вставке новой записи, надо проверить что новая дата перевода (bdate) не меньше или равна максимальной дате окончания (edate) предыдущих переводов (а их может не быть вообще если чел. новый или несколько записей в бд). Если меньше или равна - выдать текст ошибки. Иначе сохранить и всё хорошо. Это кастомная валидация я так понимаю?
Страницы 1