1

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サイトにあったすべてのステップに従いました。??

4

2 に答える 2

0

メタデータのエラー

MongoException

"" をキーとして保存しようとしました。通常、これを行うべきではありません。"" はサブオブジェクト アクセスを台無しにする可能性があり、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);
于 2013-01-31T14:27:07.797 に答える
0

現在のバージョンの MongoDB ODM では、埋め込みドキュメントに GridFS ファイルを格納することはできないようです。

回避策として @ReferenceMany を使用できます。

于 2014-02-06T11:59:34.983 に答える