2013-07-13 88 views
0

我正在寻找一个如何使用doctrine在数据库中存储文件的例子。 很抱歉,我无法在网上找到很多信息。PHP - Doctrine存储文件(数据库中的二进制文件)

我觉得像一个架构:

文件:ID,文件名,fileExt,档案大小,fileMime,modifiedAt,createdAt

FILEDATA:ID,file_id的,binaryData,modifiedAt,createdAt

有人可以给我一个实体的例子与函数来存储/检索文件?

在此先感谢!

回答

0

至少有两种方法。

在这两种情况下,主要的一点是要打开上传并填写其内容的实体属性(后表单提交,但之前的数据保存到数据库)。所以你需要有2个实体属性:上传的文件处理程序(未映射到数据库)和文件文本本身(映射到数据库)。

这里是生命周期回调的例子:

实体:

/** 
* @ORM\Entity() 
* @ORM\HasLifecycleCallbacks 
*/ 
class SomeEntity { 

    /** 
    * Virtual field used for handling the file 
    * 
    * @Assert\File() 
    */ 
    private $fileHandler; 

    /** 
    * @var string 
    * 
    * @ORM\Column(type="text") 
    */ 
    private $file; 

    /** 
    * @ORM\PrePersist() 
    * @ORM\PreUpdate() 
    */ 
    public function saveFileContent() 
    { 
     $tmpName = md5(uniqid(mt_rand(), true)) . '.' . $this->fileHandler->guessExtension(); 
     try 
     { 
      $this->fileHandler->move(
       '../../../tmp/', 
       $tmpName 
      ); 
     } catch (\Exception $e) {} 

     $this->setFile(file_get_contents('../../../tmp/' . $tmpName)); 
     unlink('../../../tmp/' . $tmpName); 
    } 
} 

这也可能是有益的:How to handle File Uploads with Doctrine

相关问题