phpsoftbox / database-lookup
Shared keyed lookup specification for PhpSoftBox database integrations
Requires
- php: ^8.5
Requires (Dev)
- phpsoftbox/cs-fixer: ^1.2.2
- phpunit/phpunit: ^13.3
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-29 11:52:00 UTC
README
Общий объект описания keyed lookup для компонентов, которым нужно согласованно читать строки по явным идентификаторам.
use PhpSoftBox\DatabaseLookup\LookupSpec; $lookup = LookupSpec::forTable('shipment_products') ->lookupColumn('product_id') ->values([10, 20, 30]) ->where('shipment_id', 123);
Если warmup key не задан явно, он строится из fixed where-колонок и lookup
колонки: shipment_id + product_id. Явный ключ можно задать через
keyColumns('shipment_id', 'product_id').
Переиспользуемые lookup-спецификации
LookupSpec — immutable value object. Он не рассчитан на наследование: fluent-методы
возвращают новый объект спецификации, а сам объект должен оставаться простым переносимым
контрактом между Database, Validator, ORM и другими слоями.
Если спецификацию нужно описать заранее и переиспользовать в нескольких местах, лучше оформить это отдельной фабрикой или именованными методами в доменном коде:
use PhpSoftBox\DatabaseLookup\LookupSpec; final class ShipmentProductLookups { public static function productsForShipment(int $shipmentId): LookupSpec { return LookupSpec::forTable('shipment_products') ->lookupColumn('product_id') ->where('shipment_id', $shipmentId); } }
Такой подход оставляет LookupSpec закрытым и предсказуемым value object, но позволяет
централизовать таблицы, колонки и scoped-условия.
Имена таблицы и колонок попадают в текст SQL, поэтому LookupSpec принимает только идентификаторы (table,
schema.table, column); кавычки, пробелы и выражения — InvalidArgumentException. Значения условий передаются
параметрами.
Лицензия
MIT