2

doctrine / mongodb-odm-bundleを使用していますが、問題があります。ドキュメントから参照行を取得できません(または、これを行う方法がわかりません)。1対1のドキュメントが2つあります。このような多くの参照:最初に

/**
 * @MongoDB\Document(collection="categories")
 */
class Category
{
    /**
     * @var integer $id
     *
     * @MongoDB\Id(strategy="auto")
     */
    private $id;

    /**
     * @var string $name
     *
     * @MongoDB\String
     * @Assert\NotBlank()
     * @Assert\MinLength(3)
     */
    private $name;

    /**
     * @MongoDB\ReferenceMany(targetDocument="Application\Bundle\DefaultBundle\Document\Wallpaper", mappedBy="category")
     */
    private $files;
.................
    /**
     * Set files
     *
     * @param array $files
     */
    public function setFiles($files)
    {
        $this->files = $files;
    }

    /**
     * Get files
     *
     * @return array $files
     */
    public function getFiles()
    {
        return $this->files;
    }

.................

/**
 * @MongoDB\Document(collection="wallpapers")
 */
class Wallpaper
{
    /**
     * @var string $id
     * @MongoDB\Id(strategy="auto")
     */
    protected $id;
    /**
     * @MongoDB\ReferenceOne(targetDocument="Application\Bundle\DefaultBundle\Document\Category", inversedBy="files")
     */
    private $category;

    /**
     * Get category
     *
     * @return Application\Bundle\DefaultBundle\Document\Category $category
     */
    public function getCategory()
    {
        return $this->category;
    }

    /**
     * Set category
     *
     * @param Application\Bundle\DefaultBundle\Document\Category $category
     */
    public function setCategory($category)
    {
        $this->category = $category;
    }

}

これがコントローラーからのコードです:

$category = $dm->getRepository('ApplicationDefaultBundle:Category')->findOneBy(...);
$wallpapers = $category->getFiles();

$wallpapersと$document->filesはNULLです。カテゴリに関連するレコードを取得するにはどうすればよいですか?コンクリートの壁紙オブジェクトからカテゴリを取得するにはどうすればよいですか?標準のORMのような「JOIN」アナログはありますか?

4

3 に答える 3

2

DoctrineORM があなたのプロジェクトを削除してよろしいですか? この問題がありました。プロジェクトDoctrineORMを削除しましたが、うまくいきました。

于 2012-07-07T10:07:00.887 に答える
2

マッピングは正しいようです。あなたの問題はクエリにあると思います。また、壁紙コレクションに正しいドキュメントがあり、カテゴリ フィールドに正しい DBRef オブジェクト データが入力されていることも確認します。

$category = $dm->getRepository('Application\Bundle\DefaultBundle\Document\Wallpaper')->findOneById($id);
$wallpapers = $category->getFiles(); // Will return a cursor to the wallpaper objects
foreach ($wallpapers as $wallpaper) {
     do stuff
}

これが問題でない場合は、試している完全なクエリと 2 つのコレクションのデータのサンプルを貼り付けていただけますか。

于 2012-03-21T19:56:30.200 に答える
0

SQL のような「結合」はありません。ODM は個別のクエリを作成し、それらをオブジェクトに結合します。デフォルトでは、doctrine はその部分にアクセスするときにこれを遅延して行います。

ジェイミーが言ったように、クエリとデータはここで役立つ重要な部分です。

于 2012-03-21T20:07:35.050 に答える