首页 > 解决方案 > Doctrine DiscriminatorMap 子句 Where

问题描述

我需要使用 DiscriminatorMap 类型的实体中的学说执行查询,其中我的条件在继承类中

命令

<?php
namespace App\Domain;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="OrderRepository")
 * @ORM\Table(name="orders")
 * @ORM\HasLifecycleCallbacks()
 */
class Order
{

    /**
     * @ORM\OneToOne(targetEntity="Customer", mappedBy="orders", cascade={"persist"})
     * @ORM\JoinColumn(name="fk_cliente", referencedColumnName="id_cliente")
     * @JMS\Groups ({"list", "details"})
     * @var Customer
     */
    private $customer;


    /**
     * @return Person|Company
     */
    public function getCustomer(): Customer
    {
        return $this->customer;
    }

    ....

顾客

<?php
namespace App\Domain;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="CustomerRepository")
 * @ORM\HasLifecycleCallbacks()
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="tipo", type="string")
 * @ORM\DiscriminatorMap({"customer" = "Customer", "F" = "Person", "J" = "Company"})
 * @ORM\Table(name="clientes")
 */
class Customer
{
    use TimestampableTrait;
    ....

预计

$query = $qb->select('p')
                ->from(\App\Domain\Order::class, 'p')
                ->leftJoin('p.customer', 'c')
                ->setMaxResults((int)$params['limit'])
                ->setFirstResult((int)$params['offset']);

$query->andWhere($qb->expr()->isNotNull('c.document'));

我需要返回客户是个人或公司类型的所有销售,文档不为空

标签: doctrine-orm

解决方案


推荐阅读