return $this->entityManager
        ->createQueryBuilder()
        ->select('cac.fkClient', 'cac.fkIndividualConsultation', 'cac.dateAdded', 'cac.fkWorker')
        ->from(ClientActivityIndividualConsultationHistory::class, 'cac')
        ->where('cac.dateAdded BETWEEN :startDate AND :endDate')
        ->andWhere('cac . fkWorker = :workerId')
        ->setParameters([
            'startDate' => $dateStart,
            'dateEnd' => $dateEnd,
            'workerId' => $workerId
        ])
        ->getQuery()
        ->getArrayResult();

Сообщение об ошибке:

[Семантическая ошибка] строка 0, столбец 11 рядом с 'fkClient, cac.fkIndividualConsultation,': Ошибка: неверное выражение пути. Должно быть StateFieldPathExpression.

ORM :

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <entity name="Sepc\Bundle\WebBundle\Entity\ClientActivityIndividualConsultationHistory"
            table="client_activity_individual_consultation_history">
        <indexes>
            <index name="fk_client_activity_individual_consulation_history_worker_id" columns="fk_worker_id"/>
            <index name="fk_client_activity_individual_consulation_history_client_id" columns="fk_client_id"/>
            <index name="fk_client_individual_consulation_history_consultation_id"
                   columns="fk_individual_consultation_id"/>
        </indexes>
        <id name="id" type="integer" column="id">
            <generator strategy="IDENTITY"/>
        </id>
        <field name="dateAdded" type="datetime" column="date_added" nullable="false">
            <options>
                <option name="default">CURRENT_TIMESTAMP</option>
            </options>
        </field>
        <many-to-one field="fkClient" target-entity="Client" fetch="LAZY">
            <join-columns>
                <join-column name="fk_client_id" referenced-column-name="id"/>
            </join-columns>
        </many-to-one>
        <many-to-one field="fkWorker" target-entity="Worker" fetch="LAZY">
            <join-columns>
                <join-column name="fk_worker_id" referenced-column-name="id"/>
            </join-columns>
        </many-to-one>
        <many-to-one field="fkIndividualConsultation" target-entity="CalendarIndividualConsultation" fetch="LAZY">
            <join-columns>
                <join-column name="fk_individual_consultation_id" referenced-column-name="id"/>
            </join-columns>
        </many-to-one>
    </entity>
</doctrine-mapping>

Я перепробовал все (stackoverflow, Google, собственный опыт), но я действительно не знаю, где могут быть проблемы. Может кто-нибудь объяснить мне эту ошибку или направить меня на правильный путь? Спасибо.

Я не хочу использовать функцию IDENTITY, потому что мне нужны все данные, связанные с внешними ключами. (Доктрина автоматически выбирает эти объекты, и я думаю, что это может вызвать ошибку, но почему?)

Использование: Symfony FW, Doctrine 2 ORM, MySQL

Мои советы:

  1. Плохо сгенерированные файлы ORM
  2. Ошибка QueryBuilder
0
Roman 19 Мар 2018 в 20:33

3 ответа

Лучший ответ
   return $this->entityManager
                ->createQueryBuilder()
                ->select('cac')
                ->distinct('cac.fkClient')
                ->from(ClientActivityIndividualConsultationHistory::class, 'cac')
                ->where('cac.dateAdded BETWEEN :startDate AND :endDate')
                ->andWhere('cac . fkWorker = :workerId')
                ->setParameters([
                    'startDate' => $dateStart,
                    'endDate' => $dateEnd,
                    'workerId' => $workerId
                ])
                ->getQuery()
                ->getResult();

Исправлена.

Вместо этого используйте функцию getResult () , если getArrayResult ();

Спасибо всем.

0
Roman 20 Мар 2018 в 08:40

Вы можете выбрать заявление пользователя следующим образом:

SELECT IDENTITY(c.parent) ...

Он вернет идентификаторы, а затем вы можете гидрировать его объектом в методе getResult () следующим образом:

->getResult(AbstractQuery::HYDRATE_OBJECT);
0
Qasim Nadeem 13 Сен 2019 в 10:48

Вы должны присоединиться к отношениям fkClient, fkIndividualConsultation и fkWorker, чтобы выбрать их.

Так что поменяйте на:

->select('cac')
->from(ClientActivityIndividualConsultationHistory::class, 'cac')
->leftJoin('cac.fkIndividualConsultation', 'fkIndividualC')
->leftJoin('cac.fkClient', 'fkClient')
->leftJoin('cac.fkWorker', 'fkWorker')
0
Jannes Botis 19 Мар 2018 в 22:15