2016-10-25 4 views
1

Я хочу найти пользователя по токену. У меня одно-много отношений. Мой файл конфигурации доктриной:Symfony3 поиск по отношениям

AppBundle\UserEntity: 
    type: entity 
    table: null 
    repositoryClass: AppBundle\Repository\UserEntityRepository 
    id: 
     id: 
      type: integer 
      id: true 
      generator: 
       strategy: AUTO 
    fields: 
     username: 
      type: string 
      length: 255 
      unique: true 
     password: 
      type: string 
      length: 255 
      nullable: true 
     salt: 
      type: string 
      length: 255 
      unique: true 
     email: 
      type: string 
      length: '100' 
    lifecycleCallbacks: { } 
    oneToMany: 
     token: 
     targetEntity: TokenEntity 
     mappedBy: user 
     fetch: EAGER 



AppBundle\TokenEntity: 
    type: entity 
    table: null 
    repositoryClass: AppBundle\Repository\TokenEntityRepository 
    id: 
     id: 
      type: integer 
      id: true 
      generator: 
       strategy: AUTO 
    fields: 
     value: 
      type: string 
      length: 255 
      unique: true 
    lifecycleCallbacks: { } 
    manyToOne: 
     user: 
     targetEntity: UserEntity 
     inversedBy: token 
     joinColumns: 
      user_id: 
      referencedColumnName: id 

Я пытаюсь пользователь поиск по лексема:

UserEntityRepository.php

<?php 

class UserEntityRepository extends EntityRepository 
{ 
    public function loadUserByToken(string $token) 
{ 
    $repository = $this->_em->getRepository('AppBundle:UserEntity'); 
    $user = $repository->findOneBy(['token'=>1]); 

    return $user; 
} 
} 

Symfony исключение броска:

Вы не можете найти поле ассоциации 'AppBundle \ Entity \ UserEntity # токен', потому что это обратная сторона объединение. Методы поиска работают только над собственными ассоциациями.

Что не так? Как восстановить эти отношения? У пользователя должно быть несколько токенов.

Вы можете мне помочь?

ответ

1

Чтобы исправить это, вы должны создать реляционный запрос:

$user = $repository->createQueryBuilder('u') 
    ->innerJoin('AppBundle:TokenEntity', 't') 
    ->where('t.value = :token') 
    ->setParameter('token', $token) 
    ->getQuery() 
    ->getOneOrNullResult(); 
+0

Это работает! Я думал, что через -> findOneBy должен работать, но это решение в порядке. Благодаря ! – Matrix12

Смежные вопросы