Pimcore 6 CSV 导入
Pimcore 6 CSV Importing
这里是 Pimcore 新手。我在 csv 导入过程中遇到了一些困难,the docs 有点浅,我找不到更全面的开发人员参考。
我不明白解析器设置是如何工作的。制定策略的意义何在? (ID 抛出 Pimcore\DataObject\Import\Resolver\ImportErrorException: Could not resolve object with id
。文件名运行,但似乎我无法控制对象的标记方式)
我导入的 csv 中有两个日期列,所以我想用它们填充我的对象。不过,日期的写法类似于“2016-05-30T14:36:03”,所以我想我需要进行一些处理以将字符串转换为 pimcore 可以识别的格式。我是否需要在列配置中执行此操作(通过将特定列转换为运算符 PHP 代码。顺便说一句,我是否需要为每一列创建一个 class,或者我可以按数据格式对它们进行分组?)或通过将解析器策略设置为代码并一次编辑所有行属性来更全局?
关于解析器
导入 CSV 时,Pimcore 基本上为每一行提供两个选项:创建新的 DataObject 或更新现有的 DataObject。当您希望 Pimcore 更新现有数据对象时,您需要一些逻辑来根据 CSV 中的某些信息检索该特定数据对象。这就是解析器的用武之地。
Pimcore 支持 5 different resolver strategies:
- Id:您的 CSV 需要包含一个带有 DataObject id 的列,该值用于获取相应的 DataObject 以进行更新
- 文件名:与上面相同,但用于 DataObject
的文件名(= 键)
- Fullpath:与上面相同,但用于 DataObject 的完整路径
- GetByAttribute:与上面相同,但对于 DataObject 中的给定属性(例如,如果您在其中有一个字段 ProductCode)
- 代码:自定义 PHP class 包含检索现有 DataObject
的逻辑
Id operator 有一个缺点,您目前 运行 是:
Resolves the objects via the object ID. The object has to exist, otherwise an error is thrown.
根据你的问题,我感觉你只是在插入新的数据对象(至少现在,也许你以后可能还想更新)。
创建数据对象时,您需要指定一个 key/filename(很可能您在手动创建对象时已经注意到这一点),因此您的 CSV 应该已经(如果没有,您应该添加)包含一个包含 key/filename 或新 DataObject 的完整路径的列。同一列 can/should 用于解析任何(可能已经)现有的数据对象。
因此您应该使用 Filename or Fullpath 解析器。如果对象已经存在,两者都有选项(更新它?忽略它?)和(在你的情况下更重要)当它不存在时做什么。
关于日期
看着code, any string that can be parsed by the PHP's method strtotime可以输入你的CSV。您的值 2016-05-30T14:36:03
解析得很好。
这里是 Pimcore 新手。我在 csv 导入过程中遇到了一些困难,the docs 有点浅,我找不到更全面的开发人员参考。
我不明白解析器设置是如何工作的。制定策略的意义何在? (ID 抛出
Pimcore\DataObject\Import\Resolver\ImportErrorException: Could not resolve object with id
。文件名运行,但似乎我无法控制对象的标记方式)我导入的 csv 中有两个日期列,所以我想用它们填充我的对象。不过,日期的写法类似于“2016-05-30T14:36:03”,所以我想我需要进行一些处理以将字符串转换为 pimcore 可以识别的格式。我是否需要在列配置中执行此操作(通过将特定列转换为运算符 PHP 代码。顺便说一句,我是否需要为每一列创建一个 class,或者我可以按数据格式对它们进行分组?)或通过将解析器策略设置为代码并一次编辑所有行属性来更全局?
关于解析器
导入 CSV 时,Pimcore 基本上为每一行提供两个选项:创建新的 DataObject 或更新现有的 DataObject。当您希望 Pimcore 更新现有数据对象时,您需要一些逻辑来根据 CSV 中的某些信息检索该特定数据对象。这就是解析器的用武之地。
Pimcore 支持 5 different resolver strategies:
- Id:您的 CSV 需要包含一个带有 DataObject id 的列,该值用于获取相应的 DataObject 以进行更新
- 文件名:与上面相同,但用于 DataObject 的文件名(= 键)
- Fullpath:与上面相同,但用于 DataObject 的完整路径
- GetByAttribute:与上面相同,但对于 DataObject 中的给定属性(例如,如果您在其中有一个字段 ProductCode)
- 代码:自定义 PHP class 包含检索现有 DataObject 的逻辑
Id operator 有一个缺点,您目前 运行 是:
Resolves the objects via the object ID. The object has to exist, otherwise an error is thrown.
根据你的问题,我感觉你只是在插入新的数据对象(至少现在,也许你以后可能还想更新)。
创建数据对象时,您需要指定一个 key/filename(很可能您在手动创建对象时已经注意到这一点),因此您的 CSV 应该已经(如果没有,您应该添加)包含一个包含 key/filename 或新 DataObject 的完整路径的列。同一列 can/should 用于解析任何(可能已经)现有的数据对象。
因此您应该使用 Filename or Fullpath 解析器。如果对象已经存在,两者都有选项(更新它?忽略它?)和(在你的情况下更重要)当它不存在时做什么。
关于日期
看着code, any string that can be parsed by the PHP's method strtotime可以输入你的CSV。您的值 2016-05-30T14:36:03
解析得很好。