我正在使用doctrine / mongodb-odm-bundle而且我有一个问题:我无法从文档中获取引用行(或者我只是不知道如何执行此操作..)
我有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->文件为NULL。我怎样才能检索与类别相关的记录?如何从具体壁纸对象中获取类别?是否有像标准ORM那样的“JOIN”模拟?
答案 0 :(得分: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
}
如果这不是问题,可以粘贴您正在尝试的完整查询以及来自两个集合的数据样本。
答案 1 :(得分:2)
你确定DoctrineORM删除了你的项目吗?我有这个问题。我删除了我的项目DoctrineORM,它已经完成了。
答案 2 :(得分:0)
在SQL中没有“join”,ODM将进行单独的查询并将它们组合到对象中。默认情况下,doctrine在访问该部分时会懒得这样做。
正如Jamie所说,查询和数据是帮助这里的关键部分。