aryelgois/yasql-php

YAML Ain't SQL 的 PHP 实现

v0.6.0 2018-05-28 19:27 UTC

This package is not auto-updated.

Last update: 2024-09-15 04:43:27 UTC


README

索引

简介

这是 YAML Ain't SQL 的 PHP 实现,其规范可在 aryelgois/yasql 中找到。

安装

进入终端,导航到您的项目根目录并运行

composer require aryelgois/yasql-php

设置

此包提供 CLI 工具以处理 YASQL 文件。要使用它们,请在您的 composer.json 中添加以下内容

{
    "scripts": {
        "yasql-build": "aryelgois\\YaSql\\Composer::build",
        "yasql-generate": "aryelgois\\YaSql\\Composer::generate"
    }
}

您还需要为构建器命令创建一个 配置文件。默认情况下,它位于 config/databases.yml,但您可以选择其他位置或拥有多个配置。
(见 构建器 规范)

用法

yasql-build

首先,根据 YASQL 模式创建数据库并在您的 配置文件 中列出它们。然后在项目根目录中运行以下命令

composer yasql-build -- [ config=path/to/config_file.yml | -c ]
                        [ output=path/to/output/ ]
                        [ vendor=vendor/package ]
  • config:列出要构建的 YASQL 数据库和要包含的供应商
    • -c 标志表示您不需要任何配置文件。当使用 vendor 参数时非常有用。它与 config='' 相同
  • output:文件生成的目录
  • vendor:要包含的附加供应商(使用默认配置文件位置)

注意

  • 命令行中的路径相对于项目根目录
  • 配置文件中的路径相对于文件本身
  • 绝对路径是绝对的(以 / 开头)
  • 供应商位于 Composer 的 vendor dir
  • 您可以选择不使用 config 以使用默认的 config/databases.yml
  • 您可以选择不使用 output 以使用默认的 build/
  • 您可以添加多个 vendor 参数
  • 将输出目录添加到您的 .gitignore 中可能是个好主意

此命令在输出目录中创建 .sql 文件,因此您可以将它们导入到您的 sql 服务器中。

yasql-generate

如果您只想从单个 YASQL 模式生成 SQL,请运行以下命令

composer yasql-generate -- path/to/yasql.yml [缩进]

第一个参数是 YASQL 文件的路径,第二个是可选的缩进(默认为 2 个空格)。

它将输出到 stdout,因此您可以将类似 > output_database.sql 的内容添加以将结果写入文件。

API

此包提供了一些类来解析 YASQL 并生成 SQL。它们位于命名空间 aryelgois\YaSql 下。

Composer

提供 Composer 脚本来从命令行使用此包。
(见如何在 设置 中配置命令)

控制器

此类封装了其他类,以使它们更容易使用。

  • static build( 字符串 $output , 字符串 $config , 字符串 $vendor [, 数组 $vendors ] )

    使用此方法将您的数据库构建到特定目录中。
    (见 Builder)

  • static generate( 字符串 $yasql [, 整数 $indent ] )

    用于从YASQL生成SQL并获取结果字符串。
    (见 Generator)

  • static parse( 字符串 $yasql )

    用于从YASQL中导出解析数据。基本上,这很好用于调试。
    (见 Parser)

解析器

  • __construct( 字符串 $yasql )

    它解析YASQL并从每个列中提取一些数据,使其为Generator准备好。

    请参阅 $yasql 规范 此处.

  • getData()

    以多维数组检索解析数据。

生成器

  • __construct( Parser $parser [, 整数 $indent ] )

    生成生成数据库的SQL。它要求一个Parser对象以确保数据有效。

  • output()

    以多行字符串检索生成的SQL。

构建器

  • __construct( [ 字符串 $output [, 字符串 $vendor ] ] )

    创建一个新的Builder对象。数据库将存入$output,供应商在$vendors中搜索。这两个路径可以是绝对路径或相对路径,默认分别为当前工作目录中的build/vendor/

  • build( 字符串 $config [, 数组 $vendors ] )

    $config文件中列出的数据库生成到对象输出目录。

  • getLog()

    从构建过程中检索日志信息。

配置文件

A YAML 包含以下键:(所有都是可选的)

  • databases: YASQL数据库模式的文件序列。它可以是字符串或YASQL pathpost sql(或post文件的序列)的映射

    此外,还可以定义一个name来覆盖数据库的名称。当您想在单个数据库中合并多个数据库模式时很有用。只是要注意冲突的表。另外,注意外部外键在SQL服务器中运行的文件顺序需要特别注意

  • indentation: 在生成SQL时使用

  • vendors:Composer安装的供应商映射到它们内部的配置文件。它可以是字符串(单个配置)或路径序列。它们相对于供应商包根目录。使用~(yaml null)表示默认配置文件路径

示例

databases:
  - ../tests/example.yml
  - path: ../data/mydatabase.yml
    post: ../data/mydatabase_populate.sql
    name: AwesomeExample

indentation: 4

vendors:
  someone/package: config/databases.yml

post文件对于预先填充行或应用YASQL规范未覆盖的sql命令很有用。其内容附加到生成的sql上。

填充器

Builder的帮助类。使用它来生成INSERT INTO语句以填充您的数据库。

这个类是抽象的,所以您必须编写一个扩展它的类。原因是数据可能具有任意的布局,这取决于您的数据库模式。

要使用它,您需要在builder配置中有一个特殊的post

来自aryelgois/databases的示例

databases:
  - path: ../data/address.yml
    post:
      - ../data/address/populate_countries.sql
      - call: aryelgois\Databases\AddressPopulator
        with:
          - ../data/address/source/Brazil.yml

post必须映射到序列,所需项是一个映射

  • call:扩展Populator的完全限定类,由Composer自动加载
  • with:包含要处理的数据的YAML文件的路径。它可以是序列

工具

还有一个具有实用方法的类。它们在内部使用,也可以由需要此包的人使用。

  • arrayAppendLast( 数组 $array , 字符串 $last [, 字符串 $others ] )

    将字符串附加到最后一个项。可选地,将字符串附加到其他项。这对于生成带有逗号分隔项的sql语句以及最后一个项的分号很有用。

变更日志