2014-09-26 7 views
0

나는 각 사용자에게 부모 사용자와 자녀가있을 가능성이 있다고 생각하면 사용자와 모든 부모를 얻을 수있는 가능성이 있는지 알고 싶습니다.사용자의 부모를 얻으십시오

여기 내 사용자 엔티티 클래스입니다. 하지

내가 xurshid29에 동의
public function hasParent() 
{ 
    return $this->parent !== null; 
} 

public function getAncestry() 
{ 
    $ancestors = array(); 
    $member = $this; 

    while ($member->hasParent()) 
    { 
    $member = $member->getParent(); 
    $ancestors[] = $member; 
    } 

    return $ancestors; 
} 
+0

이 질문을 확인할 수 있습니까?이 사용자를 부모로, 그 다음 사용자 부모를 얻으려고하십니까? –

+0

[this] (https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/tree.md)와 (과) 비슷한가요? – xurshid29

답변

1

나는 볼 수 없습니다.

+1

나는이 방법에 동의하지 않는다. 반사 기능을 사용하는 게으른로드는 웹 사이트 성능에있어 최악의 경우 일 수있다. –

+1

넌센스, 얀. 알터네이터와 같은 부품 하나만 검사하면 자동차 성능을 측정 할 수 없습니다. 같은 방법으로 한 가지 방법을 검사하여 "웹 사이트"의 실적을 측정 할 수 없습니다. 낮은 수준의 구현이 정밀한 것 이상의 의미는 아니지만,이 대답의 핵심은 조상이 게으르지 만 (쉽게 변경 될 수 있음) 조상 기간을 결정하기위한 대략적인 알고리즘을 제시하는 것이 아니라는 점입니다. 그리고 그 시점에서 이것은 비싼 알고리즘이 아닙니다. 트리에서 사용자의 깊이에 대한 O (n)입니다. –

+0

고마워, 소리가 매우 분명하고 논리가 좋다 –

0

, 당신은 부모와 자녀를 다루는 허용 Tree Doctrine Extension에보고를해야하는 이유

<?php 
namespace Lab\DemoBundle\Entity; 

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity(repositoryClass="Lab\DemoBundle\Repository\UserRepository") 
* @ORM\Table(name="users") 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @OneToOne(targetEntity="User") 
    * @JoinColumn(name="parent_id", referencedColumnName="id") 
    */ 
    private $parent; 

    /** 
    * OneToMany(targetEntity="User", inversedBy="parent") 
    * @JoinColumn(name="parent_id", referencedColumnName="id") 
    */ 
    private $childrens; 

    // ... 
} 
관련 문제