如何编写 DQL select 语句来搜索单表继承表中的部分实体,但不是全部实体

发布于 2024-12-05 19:16:28 字数 70 浏览 0 评论 0原文

所以我在一张表中有 3 个实体。我需要能够在一个 select 语句中搜索 3 个实体中的 2 个,但我不知道如何执行此操作。

So I have 3 entities within one table. I need to be able to search 2 out of the 3 entities in one select statement, but I'm not sure how to do this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小…红帽 2024-12-12 19:16:28

在 dql 查询中使用 INSTANCE OF 运算符,如下所示(其中 User 是您的基类):

$em->createQuery('
    SELECT u 
    FROM Entity\User u 
    WHERE (u INSTANCE OF Entity\Manager OR u INSTANCE OF Entity\Customer)
');

Doctrine 在 sql 查询中将其转换为 WHERE user.type = '...' 条件。

请参阅此处 有关 dql 查询语法的更多详细信息。

Use the INSTANCE OF operator in your dql query like this (where User is your base class):

$em->createQuery('
    SELECT u 
    FROM Entity\User u 
    WHERE (u INSTANCE OF Entity\Manager OR u INSTANCE OF Entity\Customer)
');

Doctrine translates this in the sql query in a WHERE user.type = '...' condition.

See here for more details on the dql query syntax.

那些过往 2024-12-12 19:16:28

多个实例的答案实际上不起作用。您必须执行类似的操作来检查多个实例。

$classes = ['Entity\Manager', 'Entity\Customer'];
$qb = $this->createQueryBuilder('u');
->where('u.id > 10') //an arbitrary condition, to show it can be combined with multiple instances tests
->andWhere("u INSTANCE OF ('" . implode("','", $classes) . "')");

The answer for multiple instances actually doesn't work. You would have to do something like this to check for multiple instances.

$classes = ['Entity\Manager', 'Entity\Customer'];
$qb = $this->createQueryBuilder('u');
->where('u.id > 10') //an arbitrary condition, to show it can be combined with multiple instances tests
->andWhere("u INSTANCE OF ('" . implode("','", $classes) . "')");
放赐 2024-12-12 19:16:28

作为flu 评论,如果如果您想使用 QueryBuilder 而不是 DQL 查询从不同实例检索一些实体,您可以使用数组作为参数:

$qb = $this->createQueryBuilder('u');
    ->where('u.id > 10') //an arbitrary condition, to show it can be combined with multiple instances tests
    ->andWhere('u INSTANCE OF :classes')
    ->setParameter('classes', ['Entity\Manager', 'Entity\Customer'])
;

As commented by flu, if you want to retrieve some entities from different instances with a QueryBuilder instead of a DQL query, you can use an array as parameter:

$qb = $this->createQueryBuilder('u');
    ->where('u.id > 10') //an arbitrary condition, to show it can be combined with multiple instances tests
    ->andWhere('u INSTANCE OF :classes')
    ->setParameter('classes', ['Entity\Manager', 'Entity\Customer'])
;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文