使用FileMaker作为CWP的后端数据库

0.2.1 2018-07-10 20:56 UTC

This package is auto-updated.

Last update: 2024-09-12 04:14:49 UTC


README

一个 Doctrine 驱动程序,用于通过 CWP API 与 FileMaker 交互。

安装

composer require matatirosoln/doctrine-filemaker-driver

配置

在您的 Doctrine 配置中注释掉以下内容

driver: xxxx

并将其替换为以下内容

driver_class: MSDev\DoctrineFileMakerDriver\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\DoctrineFileMakerDriver\FMIdentityGenerator,以便以字符串的形式返回该值。

    /**
     * @var string
     *
     * @Column(name="_pk_ClientID", type="string" length=255)
     * @Id
     * @GeneratedValue(strategy="CUSTOM")
     * @CustomIdGenerator(class="MSDev\DoctrineFileMakerDriver\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;
    
  6. 要访问查询元数据,添加一个类型为 json_array 的 rec_meta 伪属性

     /**
     * @var array
     *
     * @Column(name="rec_meta", type="json_array")
     */
     private $meta;         
    

    这将填充一个包含以下内容的数组

     [
          'found' => (int)$this->response->getFoundSetCount(),
          'fetch' => (int)$this->response->getFetchCount(),
          'total' => (int)$this->response->getTableRecordCount(),
     ]    
    

    然后您可以从返回集中任何记录中访问它。

注意事项

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

另请参阅

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