2016-10-25 50 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#token',因爲它是反面 一個關聯。查找方法僅適用於擁有邊關聯。

出了什麼問題?如何修復這種關係?用戶應該有幾個令牌。

你能幫我嗎?

回答

1

爲了解決這個問題,你應該建立一個關係查詢:

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

這工作!我認爲,通過 - > findOneBy應該有效,但這種解決方案是好的。謝謝 ! – Matrix12