保存文件名为filename的文件的常规开发问题(在Symfony2中应用)

时间:2013-12-10 00:18:35

标签: php file symfony save

我有一个带有Person实体和照片实体的Symfony2应用程序。人们可以拍很多照片。除其他属性外,photos实体还具有ID属性,Person属性(存储为person id)和filename属性。

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

这会导致一个问题,因为我现在需要将文件持久保存到数据库两次...一次获取id,然后在保存文件后再次保存,这样我就可以使用我现在的ID保存文件名有

我能想到的唯一三个解决方案是:

  1. 放弃此命名约定(非最佳)
  2. 保存实体两次(也不是最佳,我现在正在做的事情)
  3. 不要将文件路径保存在数据库中,而是在每次加载实体时从id和person_id计算它。
  4. 3是唯一不会导致任何实际问题的解决方案,但它确实感觉是错误的方法......我只是对我的“文件名”属性有分离焦虑吗?

    我很乐意接受其他人对这个问题的看法,感谢他们。

2 个答案:

答案 0 :(得分:1)

我的经验是Propel,而不是Doctrine,但基于this有关获取插入ID的信息,似乎您可能无法避免额外的呼叫。

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

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

答案 1 :(得分:1)

我建议坚持#2,因为影响应该只有几毫秒。假设自动生成ID,您将始终需要首先将记录保存到数据库以获取ID。

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