Ошибка: неверное выражение пути. Должно быть StateFieldPathExpression после запроса выбора через Doctrine

0
    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, собственные expierences), но я действительно не знаю, где может быть проблема. Может кто-нибудь объяснить мне эту ошибку или перевести меня на правильный путь? Благодарю.

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

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

Мои советы:

  1. Плохие файлы, созданные ORM
  2. Ошибка QueryBuilder
Теги:
database
orm
doctrine

2 ответа

0
Лучший ответ
   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

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

Итак, измените на:

->select('cac')
->from(ClientActivityIndividualConsultationHistory::class, 'cac')
->leftJoin('cac.fkIndividualConsultation', 'fkIndividualC')
->leftJoin('cac.fkClient', 'fkClient')
->leftJoin('cac.fkWorker', 'fkWorker')
  • 0
    Я сделал эти изменения. Все еще не работает ... та же ошибка
  • 0
    @Roman добавил недостающие отношения
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню