Skip to content

Version 6.0.1

Latest

Choose a tag to compare

@visavi visavi released this 28 Aug 21:04

6.0.1

Патч к 6.0. Обновление ничего не ломает, менять код не нужно.

Пустой ключ — это null, а null не индекс массива

Пустая колонка читается как null, а PHP 8.5 объявил использование null в качестве индекса массива устаревшим. Загрузчик связей брал $byKey[$row->attr[$localKey] ?? null], поэтому строка с
незаполненным ключом — сообщение от гостя, запись без владельца, что угодно с пустой колонкой — давала предупреждение на каждое чтение связи:

Deprecated: Using null as an array offset is deprecated, use an empty string instead
in .../src/RelationLoader.php on line 76

null не совпадает ни с чем, и ровно это такая строка и получала раньше: пустой hasOne, пустую коллекцию в остальных случаях. Теперь она не участвует в поиске, вместо того чтобы искаться по
null:

$localId = $row->attr[$relation->localKey] ?? null;
$found   = $localId === null ? null : ($byKey[$localId] ?? null);

Закрыты все четыре места, а не только то, на которое указывало предупреждение: та же ошибка была на стороне связанных записей и дважды в hasManyThrough — при сборке промежуточной таблицы и при
выборке по ней.

Поведение связей не изменилось, изменилось только отсутствие предупреждений.