2016-10-25 3 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 

I 시도 검색 사용자 토큰 :

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; 
} 
} 

심포니 던져 예외 :

당신은 협회 필드를 검색 할 수 없습니다 'AppBundle \ Entity \ UserEntity # token', 반대쪽이기 때문에 가 협회입니다. 메소드가 사이드 제휴를 소유하고있을 때만 작동합니다.

무엇이 잘못 되었나요? 이 관계를 어떻게 고쳐야합니까? 사용자는 토큰이 거의 없어야합니다.

도와 주시겠습니까?

답변

1

은 관계형 쿼리를 작성해야 해결하려면 :

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

이 작동! 나는 via -> findOneBy가 작동해야한다고 생각했지만,이 해결책은 괜찮습니다. 감사 ! – Matrix12