Неверное выражение пути в построителе запросов. Должно быть выражение пути к полю состояния

#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' и пространство имен, примененное к классу, тогда это сработало идеально. Казалось, что доктрина не вытягивала пользователя-поставщика в качестве сущности, как ожидалось, должна была быть определена вручную в соединении.