#php #doctrine-orm #doctrine #query-builder
Вопрос:
Пытаюсь извлечь все supplierUsers
, где идентификатор различен, и увлажнить результаты.
SQL — запрос для получения всех результатов будет следующим
SELECT DISTINCT supplier_user_id FROM job_item_quote
Конструктор запросов для получения вышеперечисленного.
$qb = $this-gt;createQueryBuilder('a') -gt;select('a.supplierUser') -gt;distinct(true); $result = $qb-gt;getQuery()-gt;getResult();
Выведено getQuery()
. Это именно то, что я ищу.
SELECT DISTINCT a.supplierUser FROM ProjectEntitiesJobItemQuote a
Ошибка, возникшая при попытке выбрать отдельных пользователей
[Semantical Error] line 0, col 18 near 'supplierUser,': Error: Invalid PathExpression. Must be a StateFieldPathExpression.
Я попытался добавить соединения в for supplierUser
в надежде, что это исправит ситуацию. Произошла та же ошибка.
Объект JobItemQuote
/** * @ORMEntity(repositoryClass="ProjectRepositoriesJobItemQuoteJobItemQuoteRepository") * @ORMTable(name="job_item_quote") */ class JobItemQuote extends BaseEntity { public static $joins = [ 'supplierUser' =gt; SupplierUser::class, 'jobItem' =gt; JobItem::class ]; /** * @ORMId * @ORMGeneratedValue * @ORMColumn(type="integer") * @var int */ protected $id; // thekey /** * @ORMManyToOne(targetEntity="JobItem", inversedBy="quotes") * @var JobItem */ protected $jobItem; /** * @ORMManyToOne(targetEntity="SupplierUser") * @var SupplierUser */ protected $supplierUser; .... }
Организация-поставщик-пользователь
/** * @ORMEntity(repositoryClass="ProjectRepositoriesSupplierUserSupplierUserRepository") * @ORMTable(name="supplier_user") */ class SupplierUser extends User { public static $joins = [ 'supplier' =gt; Supplier::class, 'supplierGroup' =gt; SupplierGroup::class ]; /** * @ORMOneToOne(targetEntity="Supplier", inversedBy="supplierUser", cascade={"persist"}) * @var Supplier */ protected $supplier; /** * @ORMManyToOne(targetEntity="SupplierGroup") * @var Group */ protected $supplierGroup; .... }
Ответ №1:
Вам нужно получить список supplierUsers
связанных с JobItemQuote
, поэтому вы должны сделать запрос при JobItemQuoteRepository
создании join
с supplierUsers
, который вы найдете ниже в примере :
$qb = $this-gt;createQueryBuilder('jiq') -gt;select('su') -gt;join(SupplierUser::class, 'su', Join::With, 'su.id = jiq.supplierUser') -gt;distinct(true) ; $result = $qb-gt;getQuery()-gt;getResult();
По этому запросу у вас будет список пользователей-поставщиков (четко), связанных с JobsItemQuote.
Комментарии:
1. Спасибо! пришлось внести незначительные изменения
Join::With
, пришлось изменить'with'
и пространство имен, примененное к классу, тогда это сработало идеально. Казалось, что доктрина не вытягивала пользователя-поставщика в качестве сущности, как ожидалось, должна была быть определена вручную в соединении.