我有一个用户文档,需要使用GridFS为该文档提供多张图片。我无法使用GridFS保存文件。
这是我的用户文档:
namespace Main\UserBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
*@MongoDB\Document(db="mydb", collection="users")
*/
class User
{
/**
* @MongoDB\Id
*/
protected $id;
/** @MongoDB\EmbedMany(targetDocument="Asset") */
public $assets = array();
public function __construct()
{
$this->assets = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id
*
* @return id $id
*/
public function getId()
{
return $this->id;
}
/**
* Add assets
*
* @param Main\ClassifiedBundle\Document\Asset $assets
*/
public function addAsset(\Main\ClassifiedBundle\Document\Asset $asset)
{
$this->assets[] = $asset;
}
/**
* Get assets
*
* @return Doctrine\Common\Collections\Collection $assets
*/
public function getAsset()
{
return $this->assets;
}
}
这是我的资产档案:
namespace Main\UserBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/** @MongoDB\EmbeddedDocument */
class Asset
{
/**
* @MongoDB\Id
*/
public $id;
/** @MongoDB\Field */
public $name;
/** @MongoDB\File */
public $file;
/** @MongoDB\Field */
public $uploadDate;
/** @MongoDB\Field */
public $length;
/** @MongoDB\Field */
public $chunkSize;
/** @MongoDB\Field */
public $md5;
public function getId()
{
return $this->id;
}
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
public function getFile()
{
return $this->file;
}
public function setFile($file)
{
$this->file = $file;
}
}
现在在我的控制器中,我正在尝试执行以下操作:
$dm = $this->get('doctrine.odm.mongodb.document_manager');
$user = $dm->getRepository('MainUserBundle:User')
->find(1); //I already have a user document with id 1
$asset = new Asset();
$asset->setName('Test image');
$asset->setFile($uploadedFile->getPathname()); //I have verified that this is a valid image
$user->addAsset($asset);
var_dump($user);
$dm->persist($user);
$dm->flush();
我在日志中看到的错误是:
MongoException: zero-length keys are not allowed, did you use $ with double quotes? (uncaught exception)
我在以下位置得到它:
myapp.com/vendor/doctrine-mongodb/lib/Doctrine/MongoDB/Collection.php line 203
此外,文档也未保存。我错过了什么?我已经按照mongoodm网站上的所有步骤进行了操作。 ??
答案 0 :(得分:0)
元数据错误
你试图保存""作为关键。你通常不应该这样做。 ""可以搞乱子对象访问,并由MongoDB内部使用。但是,如果您真的想要,可以在php.ini文件中将mongo.allow_empty_keys设置为true以覆盖此完整性检查。如果覆盖它,强烈建议您将错误检查设置为strict以避免字符串插值错误。
例如:
$m = new MongoClient();
$gridfs = $m->selectDB('test')->getGridFS();
$metaData = array(
'' => 'value', // '' as key
);
$gridfs->storeUpload('pic', $metaData);
答案 1 :(得分:0)
使用当前版本的MongoDB ODM,似乎无法将GridFS文件存储在嵌入式文档中。
您可以使用@ReferenceMany作为解决方法。