matatirosoln / doctrine-fm-data-api-driver
使用v17+数据API通过FileMaker作为后端数据库
Requires
- php: >=7.2.0
- ext-json: *
- ext-pdo: *
- doctrine/dbal: 2.*|3.*
- doctrine/orm: 2.*
- greenlion/php-sql-parser: ^4.0
- guzzlehttp/guzzle: ^7.3
Requires (Dev)
- doctrine/doctrine-bundle: ^1.6
- phpunit/phpunit: @stable
- sensio/framework-extra-bundle: 3.*
- symfony/framework-bundle: 3.*
- symfony/validator: 3.*
- symfony/yaml: 3.*
- dev-master
- 0.10.11
- 0.10.10
- 0.10.9
- 0.10.8
- 0.10.7
- 0.10.6
- 0.10.5
- 0.10.4
- 0.10.3
- 0.10.2
- 0.10.1
- 0.10.0
- 0.9.2
- 0.9.1
- 0.9.0
- 0.8.4
- 0.8.3
- 0.8.2
- 0.8.1
- 0.8
- 0.7.5
- 0.7.4
- 0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.8
- 0.6.7
- 0.6.6
- 0.6.5
- 0.6.4
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6.0
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.1
- 0.3.0
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.0
- dev-branch-0-10-11
- dev-branch-0-10-10
This package is auto-updated.
Last update: 2024-08-29 00:27:54 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
约定
-
创建一个表示 FileMaker 布局 的模型。将布局名称设置为模型表名称。
/** * Keyword * * @Table(name="Keyword") * @Entity(repositoryClass="Repository\KeywordRepository") */ class Keyword
-
在您的模型中创建一个 id 字段,它映射到特殊的 rec_id 伪字段
/** * @var int * * @Column(name="rec_id", type="integer") */ private $id;
-
创建您的“实际”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(); }
-
根据需要添加其他属性。要访问布局上的相关字段,请在列映射中将字段名称用单引号括起来。
/** * @var string * * @Column(name="'absCon::email'", type="string", length=255) */ private $contactEmail;
-
如果您需要访问记录修改 ID,可以添加特殊的 mod_id 伪属性
/** * @var int * * @Column(name="mod_id", type="integer") */ private $modId;
注意事项
- 由于更“传统”的数据库处理关系的这种方式,没有门户的概念。要访问相关数据,为该表(布局)创建相应的模型,并创建标准的 Doctrine 关系(一对一、一对多、多对一等)。
- 如果您的模型包含计算字段,则在尝试创建新记录时可能会遇到问题,因为 Doctrine 会尝试将这些字段设置为 null。一种“解决方案”是创建一个“占位符”模型,其中只包含创建新记录所需的字段,并实例化该模型以创建记录。如果您走这条路,您可能会想创建一个接口,您的占位符和真实实体都实现该接口,以便您可以适当地进行类型提示。
- 如果您希望执行 IN 查询,则需要将其设置为查询构建器中的最后一个
andWhere
,以便先前条件将应用于 Data API 所需的所有查询对象,以模拟 IN 查询。
另请参阅
此驱动程序是为在 Symfony 应用程序中使用而开发的(因为这就是我们所做的)。Doctrine FileMaker 扩展包创建服务以访问脚本、容器等。