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
Мои советы:
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();
Спасибо всем.
Чтобы выбрать их, вы должны присоединиться к отношениям fkClient, fkIndividualConsultation и fkWorker.
Итак, измените на:
->select('cac')
->from(ClientActivityIndividualConsultationHistory::class, 'cac')
->leftJoin('cac.fkIndividualConsultation', 'fkIndividualC')
->leftJoin('cac.fkClient', 'fkClient')
->leftJoin('cac.fkWorker', 'fkWorker')