作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何选择来自一位特定作者的所有项目?可能这样吗?或者,如果我也想要很多项目类型和项目包(项目有很多项目),我该如何编辑实体?
元素
/**
* @ORM\Table()
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({
* "cd" = "ItemCD",
* "dvd" = "ItemDVD",
* "pack" = "ItemPack",
* })
*/
class Item
{
/**
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=250, nullable=false)
*/
private $name;
}
元素CD
/**
* @ORM\Table()
* @ORM\Entity
*/
class ItemCD extends Item
{
/**
* @ORM\ManyToOne(targetEntity="Author", inversedBy="item")
* @ORM\JoinColumn(name="author_id", referencedColumnName="id")
*/
private $author;
}
元素DVD
/**
* @ORM\Table()
* @ORM\Entity
*/
class ItemDVD extends Item
{
/**
* @ORM\ManyToOne(targetEntity="Author", inversedBy="item")
* @ORM\JoinColumn(name="author_id", referencedColumnName="id")
*/
private $author;
}
元素包
/**
* @ORM\Table()
* @ORM\Entity
*/
class ItemPack extends Item
{
/**
* @ORM\ManyToMany(targetEntity="Item", inversedBy="item")
* @ORM\JoinTable()
*/
private $items;
}
作者
/**
* @ORM\Table()
* @ORM\Entity
*/
class Author
{
/**
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=250, nullable=false)
*/
private $name;
}
最佳答案
您必须查询特定元素。这是一个已知的(也是想要的)限制,因为 DQL 是一种静态类型语言:参见 http://www.doctrine-project.org/jira/browse/DDC-16
相关:how to access fields in inherited table in doctrine2 / dql query
解决此问题的一种方法是在您的 DQL 中使用 2 个子查询:
SELECT
i
FROM
Item i
WHERE
i.id IN(
SELECT
i2.id
FROM
ItemDvd i2
WHERE
i2.author = :author
)
OR
i.id IN(
SELECT
i3.id
FROM
ItemCd i3
WHERE
i3.author = :author
)
如您所见,您必须手动提取每个可能的子类型的标识符。
编辑:要获取给定作者的所有包(连同单张 DVD 或 CD),查询变得更糟:
SELECT
i
FROM
Item i
WHERE
i.id IN(
SELECT
i2.id
FROM
ItemDvd i2
WHERE
i2.author = :author
)
OR
i.id IN(
SELECT
i3.id
FROM
ItemCd i3
WHERE
i3.author = :author
)
OR
i.id IN(
SELECT
i4.id
FROM
ItemPack i4
JOIN
i4.items i5
WHERE
i5.id IN (
SELECT
i6.id
FROM
Item i6
WHERE
i6.id IN(
SELECT
i7.id
FROM
ItemDvd i7
WHERE
i7.author = :author
)
OR
i6.id IN(
SELECT
i8.id
FROM
ItemCd i8
WHERE
i8.author = :author
)
)
)
关于php - Where-ing 在歧视表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14851602/
我一直在使用标记的联合类型来处理 typescript 歧视,但我遇到了一些奇怪的事情。如果我打开实际的对象属性,一切都会按预期工作。但是如果我使用解构,typescript 会报错。我认为它与编译时
我正在创建一个动态小部件,它可以是空的也可以是已填充的。它应该默认为空。当populated={true} , 我想要 totalGross和 totalNet需要的值。否则,不应允许使用这 2 个
我是一名优秀的程序员,十分优秀!