我正在研究一个遗留系统,我正在尝试慢慢地更新现代实践。
我正在尝试实现Doctrine ORM并映射一些现有的数据库表。不幸的是,此时更改数据库结构是不可行的,所以我必须使用我所拥有的。
这是数据库结构:
FOO:
栏:
巴兹
因此每个Foo
都有多个Bar
项。这种关系很简单,并且按预期工作。问题是每个Bar
个项目,Baz
Baz.foo_id = Foo.id AND Baz.bar_id = Bar.id)
项
我搜索了一下,找不到映射方法。是否可以使用Doctrine?
class Foo
{
/**
* @Id @GeneratedValue @Column(type="integer")
*/
private $id;
/**
* @OneToMany(targetEntity="Bar", mappedBy="foo")
*/
private $bar;
}
-
class Bar
{
/**
* @Id @GeneratedValue @Column(type="integer")
*/
private $id;
/**
* @ManyToOne(targetEntity="Foo", inversedBy="bar")
* @JoinColumn(name="foo_id", referencedColumnName="id")
*/
private $foo;
//how do I get a single Baz here where (Baz.foo_id = this Foo.id AND Baz.bar_id = Bar.id)?
}
-
class Baz
{
/**
* @Id @GeneratedValue @Column(type="integer")
*/
private $id;
//?
private $foo_id;
//?
private $bar_id;
}
答案 0 :(得分:0)
您必须使用查询构建器强制对bar的结果进行此限制。
$qry = $this->entManager->getRepository("Entities\Bar")->createQueryBuilder("Bar");
$qry->Join("Entities\Baz", "Baz", "WITH", "Baz.id = Bar.id");
$qry->where(Bar.foo is not null and Baz.bar_id = Bar.id);
我希望这可以提供帮助。