0

彼はみんな、

symfony2を使用してmongodbドキュメントを簡単に参照したいと思います。

この2つのドキュメントがあり、画像参照をリクエストドキュメントに保存したいと思います。リクエストドキュメントに画像IDしかない場合は、うまくいきます。

だから私は以下が必要です:

誰もがドキュメントファイルを変更し、custum呼び出しを行って拡張し、リクエスト(画像配列)からすべての画像をオブジェクトとして取得できますか?

私の元のファイル:

ドキュメントの写真:

<?php

namespace TestBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\Document(repositoryClass="TestBundle\Repository\RequestsRepository")
 */
class Requests
{
    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\String
     */
    protected $title;

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getId()
    {
        return $this->id;
    }

    public function setTitle($title)
    {
        $this->title = $title;
    }

    public function getTitle()
    {
        return $this->title;
    }
}

ドキュメントの写真:

<?php

namespace TestBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\Document(repositoryClass="TestBundle\Repository\PicturesRepository")
 */
class Pictures
{
    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\String
     */
    protected $filename;

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getId()
    {
        return $this->id;
    }

    public function setFilename($filename)
    {
        $this->filename = $filename;
    }

    public function getTitle()
    {
        return $this->filename;
    }
}

私の基本的な呼び出し:

$dm = $this->get('doctrine.odm.mongodb.document_manager');
$request = $dm->getRepository('TestBundle:Requests')->find($requestId);

私のテストへ:

私はリクエストドキュメントに次のように追加しました:

/**
 * @MongoDB\ReferenceMany(targetDocument="Pictures",cascade={"persist"},simple="true")
 */
protected $pictures = array();
public function setPictures($pictures)
{
    $this->pictures[] = $pictures;
}

public function getPictures()
{
    return $this->pictures;

}

そしてこのような写真を追加しました:

$dm     = $this->get('doctrine.odm.mongodb.document_manager');
$photo   = $dm->getRepository('TestBundle:Pictures')->find($photoId);

$dm1 = $this->get('doctrine.odm.mongodb.document_manager');
$request = $dm1->getRepository('TestBundle:Requests')->find($requestId);

$request->setPictures($photo);
$dm1->flush();

これは機能しますが、ドキュメントを読み込んでも写真を取得できません。

ロードするコード:

$dm1 = $this->get('doctrine.odm.mongodb.document_manager');
$request = $dm1->getRepository('TestBundle:Requests')->find($requestId);

$pictures = $request->getPictures();

foreach($pictures as $picture)
{
    print $picture->getId();         
}

これは機能しません。私は次のエラーになります:

致命的なエラー:Doctrine \ ODM \ MongoDB \ Proxy \ ProxyFactory :: getProxy():開くのに失敗しました'... / app / cache / dev / doctrine / odm / mongodb / Proxys / _ CG _TestBundleDocumentPictures.php'(include_path = ' 。:... / library:/usr/local/zend/share/pear')in .... / test / vendor / doctrine-mongodb-odm / lib / Doctrine / ODM / MongoDB / Proxy / ProxyFactory.php on .... 100行目

ありがとう、ジャン

4

2 に答える 2

0

まず、$ dmでドクトリンを1回呼び出すだけで、リソースが過負荷になります。これは悪い習慣です。1つの関数、1つのDoctrine呼び出し。次に、$ dm-> persist($ request)、次に$ dm-> flush()が必要です。ドキュメント間にOnetoOneを作成してから、$picturesをDoctrineArrayコレクションにします。次に、試したように画像を設定し、簡単なクエリを実行して、$ request-> getPicture()-> getId()を呼び出します。

于 2012-07-04T23:24:23.227 に答える
0

エラーが見つかりました:

depsファイルには次の行があります。

[doctrine-common]
    git=http://github.com/doctrine/common.git
    version=2.1.4

[doctrine-dbal]
    git=http://github.com/doctrine/dbal.git
    version=2.1.7

[doctrine]
    git=http://github.com/doctrine/doctrine2.git
    version=2.1.7

それらを更新した後:

[doctrine-common]
    git=http://github.com/doctrine/common.git
    version=2.2.1

[doctrine-dbal]
    git=http://github.com/doctrine/dbal.git
    version=2.2.1

[doctrine]
    git=http://github.com/doctrine/doctrine2.git
    version=2.2.1

そしてphp bin/vendors update、参照を行うことは再び機能します

于 2012-07-05T16:06:23.000 に答える