我有一个带有Person实体和照片实体的Symfony2应用程序。人们可以拍很多照片。除其他属性外,photos实体还具有ID属性,Person属性(存储为person id)和filename属性。
我首选的照片文件命名约定是[person_id] _ [photo_id] .ext。
这会导致一个问题,因为我现在需要将文件持久保存到数据库两次...一次获取id,然后在保存文件后再次保存,这样我就可以使用我现在的ID保存文件名有
我能想到的唯一三个解决方案是:
3是唯一不会导致任何实际问题的解决方案,但它确实感觉是错误的方法......我只是对我的“文件名”属性有分离焦虑吗?
我很乐意接受其他人对这个问题的看法,感谢他们。
答案 0 :(得分:1)
我的经验是Propel,而不是Doctrine,但基于this有关获取插入ID的信息,似乎您可能无法避免额外的呼叫。
当人们提交文件时,我对文件名所做的是使用他们为其提交的名称的清理版本,并结合时间戳。这是您列表中的选项1。您可以动态计算它们,但这会增加您可能不需要的数据模型的限制。
基本上,我的文件名看起来像20131126115943-example.png
,而不是1_1.png
。
答案 1 :(得分:1)
我建议坚持#2,因为影响应该只有几毫秒。假设自动生成ID,您将始终需要首先将记录保存到数据库以获取ID。
如果性能决定你绝对不能保存实体两次,我建议你在保存之前为你的实体生成一个唯一的令牌(时间戳很好),并在文件名中使用它。