首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ODM:无法实现双向关系

ODM:无法实现双向关系
EN

Stack Overflow用户
提问于 2012-06-06 22:52:46
回答 1查看 801关注 0票数 3

我有两份文件。我试图找到所有与某个特定人相关的文件。文档保存在它们的集合中,并且正在创建从PersonPaper的引用,而不是相反的方法。

代码语言:javascript
复制
/** @ODM\Document */
class Paper
{
/**
 * @ODM\Id
 */
protected $id;

/** @ODM\ReferenceOne(targetDocument="Person", cascade={"all"}, mappedBy="papers") */
protected $person;


public function __get($property) {
    return $this->$property;
}

public function __set($property, $value) {
    $this->$property = $value;
}


public function toArray() {
    return get_object_vars($this);
}
}
代码语言:javascript
复制
/** @ODM\Document */
class Person
{
/**
 * @ODM\Id
 */
protected $id;

/** @ODM\ReferenceMany(targetDocument="Paper", cascade={"all"}, inversedBy="person") */
protected $papers;


public function __get($property) {
    return $this->$property;
}

public function __set($property, $value) {
    $this->$property = $value;
}


public function toArray() {
    return get_object_vars($this);
}
}

创建一种新的BI方向参考

代码语言:javascript
复制
$person = $dm->getRespository('Person')->find($person_id);

$paper = new Paper();
$person->papers->add($paper);

$dm->persist($person);
$dm->flush();

在后面的代码中,这个查询返回0的结果;不应该返回由指定的人编写的文档吗?

代码语言:javascript
复制
$papers = $dm->createQueryBuilder('Paper')
    ->field('person.$id')->equals(new \MongoId($person_id_as_string))
    ->getQuery()->execute();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-21 23:52:01

如果纸张::人被注释为"mappedBy“,这意味着纸张不是”拥有方“,并且教义不会坚持对纸张::person进行任何修改。

若要使查询有效,请将纸张作为自己的侧,以便纸张存储对Person的引用。

代码语言:javascript
复制
/** @ODM\Document */
class Person
{
    /** @ODM\ReferenceMany(targetDocument="Paper", mappedBy="person") */
    protected $papers;
}

/** @ODM\Document */
class Paper
{    
    /** @ODM\ReferenceOne(targetDocument="Person", inversedBy="papers") */
    protected $person;
}

创建一篇论文并坚持引用一个人:

代码语言:javascript
复制
$person = $dm->getRespository('Person')->find($person_id);

$paper = new Paper();
$paper->person = $person;

$dm->persist($paper);
$dm->flush();

通过$person查询论文:

代码语言:javascript
复制
$papers = $dm->createQueryBuilder('Paper')
    ->field('person')->references($person)
    ->getQuery()->execute();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10923438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档