保存文件名中具有文件id的文件的一般开发问题(应用于Symfony2)


General development issue saving files with file id in filename (Applied in Symfony2)

我有一个带有Person实体和photo实体的Symfony2应用程序。人们可以有很多照片。照片实体具有ID属性、Person属性(存储为Person ID)和文件名属性等属性。

我对照片文件的首选命名约定是[pperson_id]_[photo_id].ext.

然而,这导致了一个问题,因为我现在需要将文件保存到数据库两次。。。一次获取id,然后在文件保存后再次,这样我就可以用现在的id保存文件名。

我能想到的只有三种解决方案:

  1. 放弃此命名约定(不是最佳)
  2. 保存实体两次(也不是最佳的,我现在正在做什么)
  3. 不要将文件路径保存在数据库中,而是在每次加载实体时根据id和person_id计算文件路径

3是唯一不会引起任何实际问题的解决方案,但它确实感觉是错误的方法。。。我只是对我的"文件名"属性感到分离焦虑吗?

我只是对其他人对这个问题的看法持开放态度,谢谢大家。

我的经验是Propel,而不是Doctrine,但基于这一点,你可能无法避免额外的调用。

当人们提交文件时,我对文件名所做的是使用他们为其提交的名称的清理版本,并结合时间戳。这是您列表中的选项1。您可以动态计算它们,但这会给您的数据模型增加一个您可能不想要的限制。

基本上,我的文件名看起来像20131126115943-example.png,而不是1_1.png

我建议使用#2,因为影响应该只有几毫秒。假设ID是自动生成的,那么您总是需要先将记录保存到数据库中才能获得ID。

如果性能要求您绝对不能保存实体两次,我建议您在保存之前为实体生成一个唯一的令牌(时间戳很好),并在文件名中使用它。