Doctrine 2.2.2 と Oracle データベースで Symfony2 を使用しています。ファイルを BLOB として Oracle DB に保存したいと考えています。BLOB タイプを持つ Doctrine の costum タイプを作成しました。次のようになります。
class Blob extends Type
{
const BLOB = 'blob';
public function convertToPHPValue($value, AbstractPlatform $platform)
{
return (is_resource($value)) ? stream_get_contents($value) : $value;
}
public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return 'BLOB';
}
public function getBindingType() {
return \PDO::PARAM_LOB;
}
public function getName()
{
return self::BLOB;
}
}
ファイルを保持するエンティティは次のとおりです。
<?php
class Document
{
/**
* @var integer $id
*/
private $id;
/**
* @var file $file
*/
private $file;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set file
*
* @param blob $file
*/
public function setFile($file)
{
$this->file = $file;
}
/**
* Get file
*
* @return blob
*/
public function getFile()
{
return $this->file;
}
}
コントローラーでファイルを保存したい場合、Doctrine は、ファイルのアップロード時に作成される一時ファイルへのパスのみを保存します。