Я пытаюсь выполнить полнотекстовый поиск в сущности 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*/
);
}
У меня есть несколько сущностей, которые взаимодействуют с сущностью пользователя аналогичным образом, поэтому это необходимо для меня ..
Заранее спасибо всем, кто тогда помогите мне исправить это.