Невозможно выполнить полнотекстовый поиск дочерних объектов Symfony 4 - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь выполнить полнотекстовый поиск в сущности Symfony / doctrine, которая работает для полей в сущности, однако моя сущность имеет отношение «один к одному» с другой сущностью, и я хотел бы найти некоторые полей в этой сущности, тоже используя тот же поиск.

Я следовал полнотекстовым инструкциям поиска здесь:

https://medium.com/@ikerib / symfony -4-and-fulltext -search-5600186c7cbf

Это доказало, что itr работает для полей в сущности ApprenticUser (apprentice_user), например student_number.

Но когда я ищу в поле сущности user.first_name (USER - это OneToOne) Я получаю сообщение об ошибке:

[Семантическая ошибка], строка 0, столбец 87 рядом с 'firstName) ПРОТИВ (: searchterm': Ошибка: Class App \ Entity \ ApprenticeUser не имеет поля или ассоциации с именем user.firstName

Я тоже пробовал a.user.firstName.

Мой код:

Пользователь. php

/**
 * @ApiResource()
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @ORM\Table(indexes={@ORM\Index(columns={"first_name", "last_name"}, flags={"fulltext"})})
 * @UniqueEntity(fields={"email", "username"}, message="There is already an account with this email")
 */
class User implements UserInterface, TenantAware, \Serializable
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=45)
     */
    private $firstName;

    /**
     * @ORM\Column(type="string", length=45)
     */
    private $lastName;

ApprenticeUser. php

**
 * @ORM\Entity(repositoryClass="App\Repository\ApprenticeUserRepository")
 * @ORM\Table(indexes={@ORM\Index(columns={"student_number"}, flags={"fulltext"})})
 */
class ApprenticeUser
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\User", cascade={"persist", "remove"})
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

    /**
     * @ORM\Column(type="string", length=45)
     */
    private $student_number;

ApprenticeServi ce. php

class ApprenticeService {
    public function search($searchTerms, $pageNum) {

        /** @var QueryBuilder $queryBuilder */
        $queryBuilder = $this->entityManager->getRepository(ApprenticeUser::class)->createQueryBuilder('a');

        if ($searchTerms) {
            $queryBuilder->where('MATCH_AGAINST(a.student_number, a.user.first_name) AGAINST(:searchterm boolean) > 0')->setParameter('searchterm', $searchTerms);
        }

        $query = $queryBuilder->getQuery();

        return $this->paginator->paginate(
            $query,   /* query NOT result */
            $pageNum, /*page number*/
            $_ENV['AP_PAGINATION_ITEMS'] /*limit per page*/
        );
    }

У меня есть несколько сущностей, которые взаимодействуют с сущностью пользователя аналогичным образом, поэтому это необходимо для меня ..

Заранее спасибо всем, кто тогда помогите мне исправить это.

...