gpt4 book ai didi

doctrine - ODM : Cannot achieve bi-directional relationship

转载 作者:行者123 更新时间:2023-12-02 02:15:19 30 4
gpt4 key购买 nike

我有两个文件。我正在尝试查找与特定人相关的所有论文。文档保存在它们的集合中,并且正在创建从 PersonPaper 的引用,但不是相反。

/** @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);
}
}
/** @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);
}
}

创建一个新的双向引用

$person = $dm->getRespository('Person')->find($person_id);

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

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

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

$papers = $dm->createQueryBuilder('Paper')
->field('person.$id')->equals(new \MongoId($person_id_as_string))
->getQuery()->execute();

最佳答案

如果 Paper::person 被注释为“mappedBy”,这意味着 Paper 不是“拥有方”并且 Doctrine 不会保留对 Paper::person 的任何更改。

要使您的查询有效,请将 Paper 设为拥有方,以便 Paper 存储对 Person 的引用。

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

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

创建论文并保留对人的引用:

$person = $dm->getRespository('Person')->find($person_id);

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

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

按 $person 查询论文:

$papers = $dm->createQueryBuilder('Paper')
->field('person')->references($person)
->getQuery()->execute();

关于doctrine - ODM : Cannot achieve bi-directional relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923438/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com