liquetsoft/fias-laravel

Laravel 用于 FIAS 数据库导入的包

v13.0.0 2024-09-25 20:47 UTC

README

Latest Stable Version Total Downloads License Build Status

用于安装来自 ФИАС 数据的 Laravel 包。

使用 xml 文件安装 ФИАС,这些文件的链接由 ФИАС 信息服务 SOAP 服务提供。

安装

  1. 使用 composer 安装包

    composer require liquetsoft/fias-laravel
  2. 包遵循标准结构,因此对于 laravel >=5.5,将自动通过 Package Discovery 注册。对于更早的版本,需要手动注册提供者,将其添加到 config/app.php

    'providers' => [
        // Other Service Providers
        Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\LiquetsoftFiasBundleServiceProvider::class,
    ],
  3. 包提供自己的配置,默认情况下将使用它。强烈建议在项目中发布配置的副本,而不是使用内置的配置

    php artisan vendor:publish --provider="Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\LiquetsoftFiasBundleServiceProvider"
  4. 可以使用选项 eloquent_connection 配置包将使用的数据库连接

    // config/liquetsoft_fias.php
    'eloquent_connection' => 'custom_connection',
  5. 包提供迁移,这些迁移将在数据库中创建表结构

    php artisan migrate

    可以使用选项 allow_bundle_migrations 禁用迁移,如果结构不合适或过多

    // config/liquetsoft_fias.php
    'allow_bundle_migrations' => false,
  6. 包尝试将 ФИАС 记录转换为对象。需要指定使用哪些实体(未指定转换类的实体将不会使用)以及转换到哪些对象(请注意,项目侧的实体可以是任意的,symfony 序列化器 将尝试将 xml 转换为指定的对象)

    // config/liquetsoft_fias.php
    /*
     * Имя класса для сущности, которая хранит историю версий ФИАС.
     */
    'version_manager_entity' => FiasVersion::class,
    /*
     * Связка между сущностями ФИАС и моделями в проекте.
     */
    'entity_bindings' => [
        'ADDR_OBJ' => AddrObj::class,
        'ADDR_OBJ_DIVISION' => AddrObjDivision::class,
        'ADDR_OBJ_TYPES' => AddrObjTypes::class,
        'ADM_HIERARCHY' => AdmHierarchy::class,
        'APARTMENTS' => Apartments::class,
        'APARTMENT_TYPES' => ApartmentTypes::class,
        'CARPLACES' => Carplaces::class,
        'CHANGE_HISTORY' => ChangeHistory::class,
        'HOUSES' => Houses::class,
        'HOUSE_TYPES' => HouseTypes::class,
        'MUN_HIERARCHY' => MunHierarchy::class,
        'NORMATIVE_DOCS' => NormativeDocs::class,
        'NORMATIVE_DOCS_KINDS' => NormativeDocsKinds::class,
        'NORMATIVE_DOCS_TYPES' => NormativeDocsTypes::class,
        'OBJECT_LEVELS' => ObjectLevels::class,
        'OPERATION_TYPES' => OperationTypes::class,
        'PARAM' => Param::class,
        'PARAM_TYPES' => ParamTypes::class,
        'REESTR_OBJECTS' => ReestrObjects::class,
        'ROOMS' => Rooms::class,
        'ROOM_TYPES' => RoomTypes::class,
        'STEADS' => Steads::class,
    ],

    包还包括相应的 eloquent 模型和资源类

    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\AddrObj,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\AddrObjDivision,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\AddrObjTypes,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\AdmHierarchy,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\Apartments,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\ApartmentTypes,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\Carplaces,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\ChangeHistory,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\Houses,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\HouseTypes,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\MunHierarchy,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\NormativeDocs,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\NormativeDocsKinds,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\NormativeDocsTypes,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\ObjectLevels,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\OperationTypes,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\Param,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\ParamTypes,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\ReestrObjects,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\Rooms,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\RoomTypes,
    • Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Entity\Steads.

使用

包提供了几个重要的控制台命令

  1. 从头开始安装 ФИАС

    php artisan liquetsoft:fias:install
  2. 通过增量更新 ФИАС(安装仅在第一次运行时启动,更新应作为 cron 任务的设置)

    php artisan liquetsoft:fias:update
  3. 当前 ФИАС 服务器的状态(信息服务或文件服务器可能由于各种原因不可用)

    php artisan liquetsoft:fias:status
  4. 可安装和更新的 ФИАС 版本列表

    php artisan liquetsoft:fias:versions
  5. 下载和解压 ФИАС 完整版本的存档

    php artisan liquetsoft:fias:download /path/to/download full --extract
  6. 从指定目录安装 ФИАС

    php artisan liquetsoft:fias:install_from_folder /path/to/extracted/fias
  7. 从指定目录更新 ФИАС

    php artisan liquetsoft:fias:update_from_folder /path/to/extracted/fias
  8. 强制安装当前 ФИАС 版本号

    php artisan liquetsoft:fias:version_set 20160101

性能

有一些方法可以使用包的设置来加速导入

  1. 删除未使用的实体;例如,如果不需要停车场信息,则可以禁用 CARPLACES 的匹配

    // config/liquetsoft_fias.php
    'entity_bindings' => [
        // 'CARPLACES' => Carplaces::class,
    ],
  2. 由于在GAR格式中所有数据都按地区文件夹划分,因此可以排除处理未使用地区的文件

    // config/liquetsoft_fias.php
    'files_filter' => [
        "#^.+/extracted/30/AS_.+$#", // разрешает все данные для региона
        "#^.+/extracted/AS_.+$#",    // разрешает общие словари
        // все остальные файлы будут проигнорированы
    ],

内存大小耗尽

在一些Laravel安装中,安装ФИАС时由于脚本缺乏内存而出现错误。这与调试和日志记录包有关。为了安装ФИАС,应该要么完全禁用这些包,要么禁用对数据库的请求处理。

已知的冲突

  1. facade/ignition:

    • 使用以下命令发布配置文件,如果尚未发布:

      php artisan vendor:publish --provider="Facade\Ignition\IgnitionServiceProvider" --tag="flare-config"
    • 禁用对数据库查询的日志记录

      //в config/flare.php
      'reporting' => [
          'report_queries' => false,
          'report_query_bindings' => false,
      ],
  2. laravel/telescope

    • 禁用所有控制台命令的日志记录

      // в config/telescope.php
      'ignore_commands' => [
          'liquetsoft:fias*',
      ],