matatirosoln/doctrine-fm-data-api-driver

使用v17+数据API通过FileMaker作为后端数据库

0.10.11 2024-08-29 00:26 UTC

README

一个 Doctrine 驱动,用于通过 v17+ 数据 API v1 与 FileMaker 交互。

安装

composer require matatirosoln/doctrine-fm-data-api-driver

注意:我们最近更新了此库使用的 Guzzle 版本为 v7,这要求 PHP >= 7.2。如果您仍在使用更早版本的 PHP,则需要要求此库的版本为 ^0.7.5

配置

在您的 Doctrine 配置中取消注释

driver: xxxx

并将其替换为

driver_class: MSDev\DoctrineFMDataAPIDriver\FMDriver

约定

  1. 创建一个表示 FileMaker 布局 的模型。将布局名称设置为模型表名称。

     /**
      * Keyword
      *
      * @Table(name="Keyword")
      * @Entity(repositoryClass="Repository\KeywordRepository")
      */
      class Keyword
    
  2. 在您的模型中创建一个 id 字段,它映射到特殊的 rec_id 伪字段

     /**
      * @var int
      *
      * @Column(name="rec_id", type="integer")
      */
     private $id;
    
  3. 创建您的“实际”ID字段,用作关系,作为您模型的独立属性。将其 GeneratedValue 策略设置为 Custom,这意味着 Doctrie 将等待 FM 分配该值 - 假设这是一个自动输入计算字段(可能是 Get(UUID))。然后,您需要指定 CustomIdGenerator 并将其设置为 MSDev\DoctrineFMDataAPIDriver\FMIdentityGenerator,以便将值作为字符串返回。

    /**
     * @var string
     *
     * @Column(name="__pk_ClientID", type="string" length=255)
     * @Id
     * @GeneratedValue(strategy="CUSTOM")
     * @CustomIdGenerator(class="MSDev\DoctrineFMDataAPIDriver\FMIdentityGenerator")
     */
    private $uuid;
    

    或者,您可以在模型构造函数中生成 UUID(例如,使用 ramsey/uuid)。在这种情况下,您将得到类似以下的内容

     /**
      * @var string
      *
      * @Column(name="__pk_CanvasID", type="string", length=255)
      * @Id
      */
      private $uuid;
      
      public function __construct()
      {
          $this->uuid = Uuid::uuid4()->toString();
      }
    
  4. 根据需要添加其他属性。要访问布局上的相关字段,请在列映射中将字段名称用单引号括起来。

      /**
       * @var string
       *
       * @Column(name="'absCon::email'", type="string", length=255)
       */
      private $contactEmail;
    
  5. 如果您需要访问记录修改 ID,可以添加特殊的 mod_id 伪属性

     /**
      * @var int
      *
      * @Column(name="mod_id", type="integer")
      */
     private $modId;
    

注意事项

  1. 由于更“传统”的数据库处理关系的这种方式,没有门户的概念。要访问相关数据,为该表(布局)创建相应的模型,并创建标准的 Doctrine 关系(一对一、一对多、多对一等)。
  2. 如果您的模型包含计算字段,则在尝试创建新记录时可能会遇到问题,因为 Doctrine 会尝试将这些字段设置为 null。一种“解决方案”是创建一个“占位符”模型,其中只包含创建新记录所需的字段,并实例化该模型以创建记录。如果您走这条路,您可能会想创建一个接口,您的占位符和真实实体都实现该接口,以便您可以适当地进行类型提示。
  3. 如果您希望执行 IN 查询,则需要将其设置为查询构建器中的最后一个 andWhere,以便先前条件将应用于 Data API 所需的所有查询对象,以模拟 IN 查询。

另请参阅

此驱动程序是为在 Symfony 应用程序中使用而开发的(因为这就是我们所做的)。Doctrine FileMaker 扩展包创建服务以访问脚本、容器等。