Symfony2 : 사용자 엔티티에서 그룹의 역할을 가져 오지만 엔티티 내부 쿼리는 피합니다.

생선 뼈

User엔티티 UserInterfacegetRoles()방법을 구현 하고 제공합니다 . 내 시스템에서 a User는 여러에 속할 수 있습니다 Group. 그룹은 여러 역할을 가질 수 있습니다. 따라서 사용자의 역할은 모든 그룹을 수집하고 해당 그룹의 역할 목록을 병합하여 결정할 수 있습니다. FOSUserBundle에서도 같은 일이 가능합니다 .

가장 쉬운 알고리즘은 다음과 같습니다.

public function getRoles()
{
    $roles = $this->roles;
    foreach ($this->getGroups() as $group) {
        $roles = array_merge($roles, $group->getRoles());
    }
    return array_unique($roles);
}

이 솔루션은 확장 성이 좋지 않기 때문에 문제가 있다고 생각합니다. 각 그룹에 대해 새 쿼리를 실행해야하므로 쿼리 양은 그룹 수에 따라 다릅니다.

일반적으로 사용자의 모든 그룹을 수집하고 그룹의 역할에 참여하는 단일 쿼리를 정의하여이 문제를 해결합니다. 이를 위해서는 엔터티 UserRepository에서 호출 (또는 직접 교리 쿼리 작성) User이 필요하며 이는 나쁜 습관이라고 생각합니다.

그렇다면 단일 조인 쿼리의 성능 이점을 유지하면서 이러한 나쁜 관행을 어떻게 피할 수 있습니까?

(이번에는 적합한 질문 제목을 찾기가 매우 어려웠습니다. 다른 유사한 상황이 있는지 확실하지 않지만 일반적으로 저장소 자체에서 그러한 방법을 제공하기 때문에 그렇게 생각하지 않습니다. UserInterface엔터티에 있어야하는 경우 )

베네딕트

이를 수행하는 가장 쉬운 방법은 사용자 정의 UserProvider를 만드는 것입니다.

설명서 http://symfony.com/doc/current/security/custom_provider.html#create-a-user-provider참조 하십시오 .

이 사용자 공급자 내에서 사용자 이름에서 사용자를 선택하고 그룹 엔터티에 조인을 추가하는 쿼리를 만들어야하므로 쿼리가 하나만 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Symfony2 다른 엔티티에있는 엔티티의 엔티티 가져 오기

분류에서Dev

Symfony-다른 엔티티 내에서 엔티티 가져 오기

분류에서Dev

사용자의 아바타 엔티티를 가져와 Symfony2에서 제거 할 수 없습니다.

분류에서Dev

Symfony에서 Doctrine을 사용하여 엔티티를 만드는 동안 오류가 발생했습니다.

분류에서Dev

Symfony는 엔티티에서 연결된 사용자 ID를 가져옵니다.

분류에서Dev

Symfony 3 엔티티 내부에 현재 사용자 가져 오기

분류에서Dev

나머지 서비스는 ID가 포함 된 엔티티를 다른 엔티티 또는 엔티티 자체에 반환해야합니까?

분류에서Dev

Symfony에서 Doctrine을 사용하여 엔티티를 생성하는 동안 오류가 발생했습니다.

분류에서Dev

Symfony2는 ManyToMany 관계를 사용하여 반전 된 엔티티에서 객체를 가져옵니다.

분류에서Dev

왜 네이티브 쿼리에서 Hibernate 지연로드의 자식 엔티티가 있습니까?

분류에서Dev

엔티티 관리자가 관리하는 엔티티는 힙 메모리에 2 개의 오브젝트가 있습니까?

분류에서Dev

Symfony2의 엔티티에서 데이터를 가져 오지 못함

분류에서Dev

Symfony 양식 오류 : 선택 필드에 전달 된 "..."유형의 엔티티를 관리해야합니다. 엔티티 관리자에서 유지하는 것을 잊었을 수 있습니다

분류에서Dev

Doctrine2 + Symfony2 : Symfony2에서 네임 스페이스가 지정된 Doctrine 엔티티를 사용하는 방법은 무엇입니까?

분류에서Dev

교리에 의해 엔티티에서 다른 엔티티 만들기

분류에서Dev

동일한 엔티티의 내부 조인에서 Hibernate 엔티티 가져 오기

분류에서Dev

linq에서 엔티티의 ICollection을 엔티티로 쿼리

분류에서Dev

엔티티에 쿼리가있는 Symfony2 메서드

분류에서Dev

Constraint Validator는 엔티티가 Symfony 2에서 준비되기 전에 엔티티를 검증합니다.

분류에서Dev

org.hibernate.AnnotationException : JPA XML 엔티티 매핑을 사용하는 엔티티에 대해 지정된 식별자가 없습니다.

분류에서Dev

H2 나의 봄 부팅 응용 프로그램에서 테이블을 생성 / 업데이트되지. 내 엔티티와 뭔가 잘못?

분류에서Dev

Symfony2는 기존 엔티티를 편집하지 않고 새 엔티티를 기존 엔티티에 연결합니다.

분류에서Dev

하위 엔티티의 필드를 기반으로 Hazelcast 맵에서 엔티티를 가져 오는 방법

분류에서Dev

다른 엔티티 (NestJS) 내에 엔티티 생성을 추가하는 방법은 무엇입니까?

분류에서Dev

Linq 쿼리가 엔티티를 던지거나 linq에서 엔티티로 복합 유형을 생성 할 수 없습니다. select new {..}를 사용하여 클래스 이름을 제거하더라도

분류에서Dev

Symfony2 Doctrine2 Many To Many는 모든 엔티티를 관계 엔티티와 함께 가져옵니다.

분류에서Dev

하나에 병합하지 않고 libxml을 사용하여 외부 엔티티가있는 XML 파일 저장

분류에서Dev

교리 Symfony2는 기존 엔티티와 연관 엔티티를 유지합니다.

분류에서Dev

엔티티가있는 사용자 정의 Symfony 번들

Related 관련 기사

  1. 1

    Symfony2 다른 엔티티에있는 엔티티의 엔티티 가져 오기

  2. 2

    Symfony-다른 엔티티 내에서 엔티티 가져 오기

  3. 3

    사용자의 아바타 엔티티를 가져와 Symfony2에서 제거 할 수 없습니다.

  4. 4

    Symfony에서 Doctrine을 사용하여 엔티티를 만드는 동안 오류가 발생했습니다.

  5. 5

    Symfony는 엔티티에서 연결된 사용자 ID를 가져옵니다.

  6. 6

    Symfony 3 엔티티 내부에 현재 사용자 가져 오기

  7. 7

    나머지 서비스는 ID가 포함 된 엔티티를 다른 엔티티 또는 엔티티 자체에 반환해야합니까?

  8. 8

    Symfony에서 Doctrine을 사용하여 엔티티를 생성하는 동안 오류가 발생했습니다.

  9. 9

    Symfony2는 ManyToMany 관계를 사용하여 반전 된 엔티티에서 객체를 가져옵니다.

  10. 10

    왜 네이티브 쿼리에서 Hibernate 지연로드의 자식 엔티티가 있습니까?

  11. 11

    엔티티 관리자가 관리하는 엔티티는 힙 메모리에 2 개의 오브젝트가 있습니까?

  12. 12

    Symfony2의 엔티티에서 데이터를 가져 오지 못함

  13. 13

    Symfony 양식 오류 : 선택 필드에 전달 된 "..."유형의 엔티티를 관리해야합니다. 엔티티 관리자에서 유지하는 것을 잊었을 수 있습니다

  14. 14

    Doctrine2 + Symfony2 : Symfony2에서 네임 스페이스가 지정된 Doctrine 엔티티를 사용하는 방법은 무엇입니까?

  15. 15

    교리에 의해 엔티티에서 다른 엔티티 만들기

  16. 16

    동일한 엔티티의 내부 조인에서 Hibernate 엔티티 가져 오기

  17. 17

    linq에서 엔티티의 ICollection을 엔티티로 쿼리

  18. 18

    엔티티에 쿼리가있는 Symfony2 메서드

  19. 19

    Constraint Validator는 엔티티가 Symfony 2에서 준비되기 전에 엔티티를 검증합니다.

  20. 20

    org.hibernate.AnnotationException : JPA XML 엔티티 매핑을 사용하는 엔티티에 대해 지정된 식별자가 없습니다.

  21. 21

    H2 나의 봄 부팅 응용 프로그램에서 테이블을 생성 / 업데이트되지. 내 엔티티와 뭔가 잘못?

  22. 22

    Symfony2는 기존 엔티티를 편집하지 않고 새 엔티티를 기존 엔티티에 연결합니다.

  23. 23

    하위 엔티티의 필드를 기반으로 Hazelcast 맵에서 엔티티를 가져 오는 방법

  24. 24

    다른 엔티티 (NestJS) 내에 엔티티 생성을 추가하는 방법은 무엇입니까?

  25. 25

    Linq 쿼리가 엔티티를 던지거나 linq에서 엔티티로 복합 유형을 생성 할 수 없습니다. select new {..}를 사용하여 클래스 이름을 제거하더라도

  26. 26

    Symfony2 Doctrine2 Many To Many는 모든 엔티티를 관계 엔티티와 함께 가져옵니다.

  27. 27

    하나에 병합하지 않고 libxml을 사용하여 외부 엔티티가있는 XML 파일 저장

  28. 28

    교리 Symfony2는 기존 엔티티와 연관 엔티티를 유지합니다.

  29. 29

    엔티티가있는 사용자 정의 Symfony 번들

뜨겁다태그

보관