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
中进行查询,使 join
与 supplierUsers
,你会发现下面的例子:
$qb = $this->createQueryBuilder('jiq')
->select('su')
->join(SupplierUser::class, 'su', Join::With, 'su.id = jiq.supplierUser')
->distinct(true)
;
$result = $qb->getQuery()->getResult();
通过此查询,您将获得(明确地)与 JobsItemQuote 关联的 SupplierUser 列表。
正在尝试获取 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
中进行查询,使 join
与 supplierUsers
,你会发现下面的例子:
$qb = $this->createQueryBuilder('jiq')
->select('su')
->join(SupplierUser::class, 'su', Join::With, 'su.id = jiq.supplierUser')
->distinct(true)
;
$result = $qb->getQuery()->getResult();
通过此查询,您将获得(明确地)与 JobsItemQuote 关联的 SupplierUser 列表。