Ресурсы JSON:API
В Laravel 12 и 13 есть Illuminate\Http\Resources\JsonApi\JsonApiResource. Пакет работает с ним и добавляет одно исправление для суженных select.
Строгие модели и разреженные наборы полей
JsonApiResource Laravel читает каждый перечисленный атрибут до того, как применит fields[<type>]. С Model::preventAccessingMissingAttributes() (или Model::shouldBeStrict()) модель, загруженная с суженным SELECT, тогда бросает MissingAttributeException.
Наследуйтесь вместо этого от MyProgs\QueryBuilder\Resources\JsonApiResource или подключите его трейт MyProgs\QueryBuilder\Resources\LazyAttributes в свой базовый ресурс: атрибут, перечисленный по имени, тогда читается, только если ответ его оставляет.
use MyProgs\QueryBuilder\Resources\JsonApiResource;
class ArticleResource extends JsonApiResource
{
public $attributes = ['title', 'body', 'views'];
public $relationships = ['author', 'comments'];
}Совпадение типов
Ресурс сужает свои атрибуты по fields[<type>] с типом, который выводит из имени своего класса, а запрос сужает SELECT по ключам определения. Держите их одинаковыми: задайте определению type() ресурса и описывайте подгружаемую связь определением этого типа (Relationship::to('author', UserQuery::class)), чтобы до неё доходил fields[users], который присылает JSON:API-клиент.