henrotaym/laravel-belgian-province-finder
Composer 安装命令:
composer require henrotaym/laravel-belgian-province-finder
包简介
Finding belgian province based on given criteria.
README 文档
README
Compatibility
| Laravel | Package |
|---|---|
| 9.x | 1.x |
| 12.x | 2.x |
Installation
composer require henrotaym/laravel-belgian-province-finder
Usage
use Henrotaym\LaravelBelgianProvinceFinder\Models\Provinces\ProvinceKey; use Henrotaym\LaravelBelgianProvinceFinder\Contracts\Repositories\Provinces\ProvinceRepositoryContract; $repository = app()->make(ProvinceRepositoryContract::class); // ProvinceRepositoryContract $liegeProvince = $repository->findByPostcode(4000); // ?ProvinceContract $westFlandersProvince = $repository->findByKey(ProvinceKey::WEST_FLANDERS); // ?ProvinceContract $provinces = $repository->getAll(); // Collection<int, ProvinceContract>
Province related model
Configure your model with trait and interface
use Illuminate\Database\Eloquent\Model; use Henrotaym\LaravelBelgianProvinceFinder\Models\Scopes\IsProvinceRelatedModel; use Henrotaym\LaravelBelgianProvinceFinder\Contracts\Models\IsProvinceRelatedModelContract; class MyModel extends Model implements IsProvinceRelatedModelContract { use IsProvinceRelatedModel; public function getProvincePostcodeColumn(): string { return "address->postcode"; } public function getProvincePostcodeValue(): ?int { return $this->address['postcode'] ?? null; } }
Usage
$models = MyModel::query()->whereProvinceIs($province)->get(); // Collection<int, MyModel> MyModel::find(23)->getProvinceByPostcode() // ProvinceContract
References
ProvinceRepository
use Illuminate\Support\Collection; use Henrotaym\LaravelBelgianProvinceFinder\Contracts\Models\Provinces\ProvinceContract; use Henrotaym\LaravelBelgianProvinceFinder\Models\Provinces\ProvinceKey; interface ProvinceRepositoryContract { /** * Finding province based on given postcode. * * @param int $postcode * @return ?ProvinceContract */ public function findByPostcode(int $postcode): ?ProvinceContract; /** * Finding province based on given unique key. * * @param ProvinceKey $key * @return ?ProvinceContract */ public function findByKey(ProvinceKey $key): ?ProvinceContract; /** * Getting all provinces. * * @return Collection<int, ProvinceContract> */ public function getAll(): Collection; }
Province
use Illuminate\Support\Collection; use Henrotaym\LaravelBelgianProvinceFinder\Models\Provinces\ProvinceKey; use Henrotaym\LaravelBelgianProvinceFinder\Contracts\Models\Provinces\PostcodeIntervalContract; interface ProvinceContract { /** * Getting province name. * * @return string */ public function getName(): string; /** * Getting province unique key. * * @return ProvinceKey */ public function getKey(): ProvinceKey; /** * Getting related postcode intervals. * * @return Collection<int, PostcodeIntervalContract> */ public function getPostcodeIntervals(): Collection; /** * Telling if given postcode is included in province. * * @param int $postcode * @return bool */ public function isPostcodeIncluded(int $postcode): bool; }
PostcodeInterval
namespace Henrotaym\LaravelBelgianProvinceFinder\Contracts\Models\Provinces; interface PostcodeIntervalContract { /** * Getting starting interval postcode. * * @return int */ public function getStart(): int; /** * Getting ending interval postcode. * * @return int */ public function getEnd(): int; /** * Telling if given postcode is included in postcode range. * * @param int $postcode * @return bool */ public function isPostcodeIncluded(int $postcode): bool; }
ProvinceKey
enum ProvinceKey: string { case WEST_FLANDERS = "west-flanders"; case EAST_FLANDERS = "east-flanders"; case ANTWERP = "antwerp"; case LIMBURG = "limburg"; case FLEMISH_BRABANT = "flemish-brabant"; case BRUSSELS_CAPITAL_REGION = "brussels-capital-region"; case WALLOON_BRABANT = "walloon-brabant"; case HAINAUT = "hainaut"; case NAMUR = "namur"; case LIEGE = "liege"; case LUXEMBOURG = "luxembourg"; }
IsProvinceRelatedModel
use Illuminate\Support\Collection; use Illuminate\Database\Eloquent\Builder; use Henrotaym\LaravelBelgianProvinceFinder\Contracts\Models\Provinces\ProvinceContract; use Henrotaym\LaravelBelgianProvinceFinder\Contracts\Models\Provinces\PostcodeIntervalContract; interface IsProvinceRelatedModel { /** * Limiting models to those matching given province. * * @param Builder $query * @param ProvinceContract $province * @param string $postcodeColumn * @return Builder */ public function scopeWhereProvinceIs(Builder $query, ProvinceContract $province, ?string $postcodeColumn = null): Builder; /** * Limiting models to those matching given postcode intervals. * * @param Builder $query * @param Collection<int, PostcodeIntervalContract> $postcodeIntervals * @param string $postcodeColumn * @return Builder */ public function scopeInPostcodeIntervals(Builder $query, Collection $postcodeIntervals, ?string $postcodeColumn = null): Builder; /** * Limiting models to those matching given postcode interval. * * @param Builder $query * @param PostcodeIntervalContract $postcodeInterval * @param string $postcodeColumn * @return Builder */ public function scopeInPostcodeInterval(Builder $query, PostcodeIntervalContract $postcodeInterval, ?string $postcodeColumn = null): Builder; /** * Getting related province using postcode column. * * @return ?ProvinceContract */ public function getProvinceByPostcode(): ?ProvinceContract; }
henrotaym/laravel-belgian-province-finder 适用场景与选型建议
henrotaym/laravel-belgian-province-finder 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 131 次下载、GitHub Stars 达 0, 最近一次更新时间为 2023 年 02 月 13 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 henrotaym/laravel-belgian-province-finder 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 henrotaym/laravel-belgian-province-finder 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 131
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 17
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2023-02-13