QueryBuilder 无效的 PathExpression。必须是 StateFieldPathExpression

QueryBuilder Invalid PathExpression. Must be a StateFieldPathExpression

正在尝试获取 ID 为 DISTINCT 的所有 supplierUsers 并合并结果。

获取所有结果的SQL查询如下

SELECT DISTINCT supplier_user_id FROM job_item_quote

用于获取上述内容的查询生成器。

$qb = $this->createQueryBuilder('a')
        ->select('a.supplierUser')
        ->distinct(true);
$result = $qb->getQuery()->getResult();

输出getQuery()。这正是我要找的。

SELECT DISTINCT a.supplierUser FROM Project\Entities\JobItemQuote a

尝试获取不同用户时抛出的错误

[Semantical Error] line 0, col 18 near 'supplierUser,': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

我已经尝试为 supplierUser 添加连接,希望它能解决问题。抛出相同的错误。

JobItemQuote 实体

/**
 * @ORM\Entity(repositoryClass="Project\Repositories\JobItemQuote\JobItemQuoteRepository")
 * @ORM\Table(name="job_item_quote")
 */
class JobItemQuote extends BaseEntity
{
    public static $joins = [
        'supplierUser' => SupplierUser::class,
        'jobItem' => JobItem::class
    ];
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     * @var int
     */
    protected $id; // thekey

    /**
     * @ORM\ManyToOne(targetEntity="JobItem", inversedBy="quotes")
     * @var JobItem
     */
    protected $jobItem;

    /**
     * @ORM\ManyToOne(targetEntity="SupplierUser")
     * @var SupplierUser
     */
    protected $supplierUser;

    
    ....

}

供应商用户实体

/**
 * @ORM\Entity(repositoryClass="Project\Repositories\SupplierUser\SupplierUserRepository")
 * @ORM\Table(name="supplier_user")
 */


class SupplierUser extends User {

    public static $joins = [
        'supplier' => Supplier::class,
        'supplierGroup' => SupplierGroup::class
    ];

    /**
     * @ORM\OneToOne(targetEntity="Supplier", inversedBy="supplierUser", cascade={"persist"})
     * @var Supplier
     */
    protected $supplier;

    /**
     * @ORM\ManyToOne(targetEntity="SupplierGroup")
     * @var Group
     */
    protected $supplierGroup;

    ....
}

您需要检索与 JobItemQuote 关联的 supplierUsers 的列表,因此您应该在 JobItemQuoteRepository 中进行查询,使 joinsupplierUsers,你会发现下面的例子:

$qb = $this->createQueryBuilder('jiq')
          ->select('su')
          ->join(SupplierUser::class, 'su', Join::With, 'su.id = jiq.supplierUser')
          ->distinct(true)
      ;

$result = $qb->getQuery()->getResult();

通过此查询,您将获得(明确地)与 JobsItemQuote 关联的 SupplierUser 列表。