salibhdr / typhoon-iran-cities
这是一个Laravel包,可以将伊朗的所有地区(如省份、县、市、市区、乡村和村庄)准确导入数据库
Requires
- php: >=5.6.0
- laravel/framework: >=5.0
This package is auto-updated.
Last update: 2024-09-18 12:44:17 UTC
README
简介
Typhoon Iran Cities是一个Laravel包,只需一个控制台命令即可将伊朗的所有地区(如省份、县、市、市区、乡村和村庄)导入您的数据库。
毫无疑问,这是最精确的伊朗行政区划Laravel包。
注意:此包允许您选择是否在单个表中使用所有地区,或将其分别划分在各自的表中,或者甚至可以选择您想要的数据。
功能
- 伊朗所有省份(استان)
- 伊朗所有县(شهرستان)
- 伊朗所有区(بخش)
- 伊朗所有市(شهر)
- 伊朗所有市区(مناطق شهری)
- 伊朗所有乡村(دهستان)
- 伊朗所有村庄(آبادی)
- 内置的省份、县、区、市、市区、乡村和村庄模型
- 这些表之间的关系数据库
- 既可以在一个地区表中全部包含,也可以分开在不同的表中
- 辅助方法
安装
使用composer安装
$ composer require salibhdr/typhoon-iran-cities
对于Laravel < 5.5,请在config/app.php配置文件中注册服务提供者
'providers' => [
# Other service providers...
SaliBhdr\TyphoonIranCities\IranCitiesServiceProvider::class,
],
入门
此包提供了一些命令,您可以使用它们轻松导入您所需地区的迁移、模型和数据。
在此之前,您应该注意命令中使用的两个选项的解释
--unite
选项
此包可以用于两种不同的策略。一些程序员喜欢每个地区使用单独的表,而其他人则喜欢所有地区都使用单个表。
为此,在本包的第三个版本中,您可以根据自己的喜好选择这些策略之一。
如果您想将所有地区放在一个表中,必须在命令中使用--unite
选项。
--target
选项
--target
选项允许您选择您想要使用的地区。
假设您只想将城市添加到数据库中,并且可能不需要村庄或乡村地区。您只需将--target
值设置为城市即可。
您可以从以下选项中选择您想要使用的目标地区:所有、省份、县、区、市、市区、乡村地区、村庄
--target
选项的默认值设置为所有。因此,如果您想要所有地区,请勿使用此选项。
用法
命令
以下是所有可用命令的列表
# init command that runs publish and import commands step by step (For ease of use) iran:init Copies models and migrations then imports data # publish commands iran:publish:migrations Copies migrations into migrations directory iran:publish:models Copies related models # import commands iran:import Imports all regions into the database (Can be selected by option)
命令说明
iran:init
命令
如果您是首次使用此包,或者由于某种原因迁移、模型或数据已删除,可以使用此命令初始化所有三个。在底层,此命令按顺序执行以下命令
iran:publish:migrations Copies migrations into migrations directory iran:publish:models Copies related models migrate For migrating new migrations of package iran:import Imports all regions into the database (Can be selected by option)
如前所述,所有命令都具有--unite
和--target
选项。
如果您想将所有地区都放入一个 regions
表格中,请使用 --unite
选项。
在以下部分,我们针对城市的目标检查这两个案例。如果您想包含所有地区,请勿使用此选项。
- 一个
regions
表格
php artisan iran:init --unite --target=cities
这将发布 IranRegion
模型,create_iran_regions_table
迁移,并将数据导入到城市级别到 iran_regions
表格中,并将忽略城市区,乡村区和村庄。
- 单独的表格
php artisan iran:init --target=cities
这将发布 IranProvince
,IranCounty
,IranSector
和 IranCity
模型,这些模型的相关迁移,并将数据导入到单独的表格中,并将忽略城市区,乡村区和村庄。
iran:import
命令
此命令仅导入数据。请根据您的需求正确使用 --unite
和 --target
选项。
查看上面的 iran:init
部分,了解这些选项的使用方法。
城市示例
- 一个
regions
表格
php artisan iran:import --unite --target=cities
这将导入数据到城市级别到 iran_regions
表格中,并将忽略城市区,乡村区和村庄。
- 单独的表格
php artisan iran:import --target=cities
这将导入数据到城市级别到单独的表格中,并将忽略城市区,乡村区和村庄。
iran:publish:migrations
命令
此命令将发布相关迁移文件。请根据您的需求正确使用 --unite
和 --target
选项。
查看上面的 iran:init
部分,了解这些选项的使用方法。
您可以使用 --force
选项覆盖现有文件。
城市示例
- 一个
regions
表格
php artisan iran:publish:migrations --unite --target=cities
这将发布 create_iran_regions_table
迁移文件。
- 单独的表格
php artisan iran:import --target=cities
这将发布到城市级别的相关迁移文件。
iran:publish:models
命令
此命令将发布相关模型文件。请根据您的需求正确使用 --unite
和 --target
选项。
查看上面的 iran:init
部分,了解这些选项的使用方法。
您可以使用 --force
选项覆盖现有文件。
城市示例
- 一个
regions
表格
php artisan iran:publish:models --unite --target=cities
这将发布 IranRegion
模型文件。
- 单独的表格
php artisan iran:import --target=cities
这将发布到城市级别的相关模型文件。
代码
此包使用 eloquent 模型。一些方法在模型之间是通用的,而另一些则不是。以下是所有可用方法的列表及其用法。
所有模型的通用方法
所有模型都有这些方法
合并模式
IranRegion 模型
单独模式
IranProvince 模型
IranCounty 模型
IranSector 模型
IranCity 模型
IranCityDistrict 模型
IranRuralDistrict 模型
IranVillage 模型
所有模型之间都有关系方法。
示例
- IranCity 模型
use App\Models\IranCity; # Fetching collection of cities $cities = IranCity::getAll(); // returns collection of cities $activeCities = IranCity::getAllActive(); // returns collection of active cities $notActiveCities = IranCity::getAllNotActive(); // returns collection of not active cities # Getting County $city = IranCity::find(1); # A city belongs to a county $county = $city->county()->first(); // returns County model $county = $city->getCounty(); // returns County model # A city belongs to one province $province = $city->province()->first(); // returns Province model $province = $city->getProvince(); // returns Province model
状态字段
每个表格都有一个名为 status
的字段。此字段是布尔类型字段,其中 1
表示活动记录,0
表示非活动记录。为了确保您始终获得活动记录,请使用 active()
方法。
use App\Models\IranCity; use App\Models\IranCounty; use App\Models\IranProvince; # To get active provinces or an active province: $provinces = IranProvince::active()->get(); // returns collection of all active provinces $provinces = IranProvince::notActive()->get(); // returns collection of all not active provinces # You can even check if the record is active or not $city = IranCity::find(1); $city->isActive(); //returns true if the record is active false if is not active $city->isNotActive(); //returns true if the record is not active false if is active # You can even activate and deactivate records like so: $county = IranCounty::find(1); $county->activate(); // activates record by setting status field in db to 1 $county->deactivate(); // deactivates record by setting status field in db to 0
注意
停用将按部门层次结构应用。例如
- 省的停用将停用该省的所有县和城市等。
- 县的停用将停用该县的所有城市等。
请注意,子记录将不会更改。如果您尝试通过 active()
范围获取它们,它们将不可用。
例如
use App\Models\IranProvince; use App\Models\IranCity; # assume that city with id `1` is belongs to province with id `1' # if you deactivate province all the cities will be deactivated and not showed in the results. $province = IranProvince::active()->find(1); // find the active province with id `1` $province->deactivate(); // deactivate province with id `1` # now if you try to get city: $city = IranCity::active()->find(1); // returns null because the province of the city is deactivated //or $city = IranCity::find(1); // finds the record because you didn't use active() scope $city->isActive(); // return false because the province of the city is not active but the status is still 1
待办事项
- 编写测试
- 添加地区的经纬度
- 添加地区的地理位置
问题
您可以在 github 仓库 此处 报告问题。
许可
Typhoon-Iran-Cities 是在 MIT 许可下发布的。
由 Salar Bahador 创建。
用 ❤ 为您构建。
贡献
贡献,有用的评论和反馈非常受欢迎!
参考
基于 ahmadazizi/iran-cities git 仓库版本 3。了解更多信息。