2017-09-12 109 views
7

Mam tabelę danych, która zawiera listę multimediów, dokumentów, plików PDF i folderów. Tak jak w przypadku Dysku Google, chcę wyświetlić ścieżkę nawigacyjną u góry tabeli danych. Tabela danych odzwierciedla zmiany po kliknięciu dowolnego folderu za pośrednictwem jQuery. Wszystkie rzeczy są gotowe, oprócz bułki. Mam identyfikator bieżącego folderu otwartego, ale nie wiem, jak uzyskać hierarchię z katalogu głównego do bieżącego folderu.Generator zapytania rekurencyjnego Symfony2

Obecnie daje mi identyfikator rodzica, a nie całą hierarchię.

Uwaga: - Brak związku między kolumnami, ponieważ był w tej samej tabeli.
Podmiot Pola: - id, nameDisplay, parentId

Podmiot Definicja: - konstruktora

/** 
* driveall 
* @ORM\Table(name="Driveall") 
* @ORM\Entity(repositoryClass="DriveBundle\Repository\DriveallRepository") 
*/ 
class Driveall 
{ 
    /** 
    * @var int 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * @ORM\Column(name="Name_Display", type="string", length=255) 
    */ 
    private $nameDisplay; 

    /** 
    * @var int 
    * @ORM\Column(name="ParentID", type="integer") 
    */ 
    private $parentID; 

    /** 
    * Get id 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set nameDisplay 
    * @param string $nameDisplay 
    * @return driveall 
    */ 
    public function setNameDisplay($nameDisplay) 
    { 
     $this->nameDisplay = $nameDisplay; 
     return $this; 
    } 

    /** 
    * Get nameDisplay 
    * @return string 
    */ 
    public function getNameDisplay() 
    { 
     return $this->nameDisplay; 
    } 

    /** 
    * Set parentID 
    * @param integer $parentID 
    * @return Driveall 
    */ 
    public function setParentID($parentID) 
    { 
     $this->parentID = $parentID; 
     return $this; 
    } 

    /** 
    * Get parentID 
    * @return integer 
    */ 
    public function getParentID() 
    { 
     return $this->parentID; 
    } 
} 

Zapytanie: -

$qb = $this->_em->createQueryBuilder(); 
$qb->select("d.parentID,pid.nameDisplay") 
    ->from($this->_entityName, 'd') 
    ->leftJoin($this->_entityName, 'pid', 'WITH', 'pid.id = d.parentID') 
    ->where("d.status=0") 
    ->andWhere("d.id=" . $id) 
    ->orderBy('d.nameDisplay', 'ASC'); 
$data = $qb->getQuery() 
      ->getResult(); 
return $data; 
+1

post folder definicja podmiotu –

+0

@MKhalidJunaid Podmiot definicja dodany –

Odpowiedz

4

Zakładam zdefiniowano klasę encji na stole za pomocą adnotacji Doctrine. na przykład.

/** 
* @ORM\Entity 
* @ORM\Table(name="folder") 
*/ 
class Folder 
{ 

/** 
* @ORM\Column(type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @ORM\Column(name="nameDisplay", type="string", length=100) 
*/ 
private $nameDisplay; 

/** 
* parentID 
* @ORM\Column(name="parentID", type="integer", nullable=true) 
*/ 
private $parentId; 
} 

Można użyć "createNativeQuery()" swojego kierownika jednostki, aby osiągnąć to, co chcesz:

use Doctrine\ORM\Query\ResultSetMapping; 
... 
$rsm = new ResultSetMapping(); 
$rsm->addEntityResult(\AppBundle\Entity\Folder::class, 'fd'); 

$rsm->addFieldResult('fd','id','id'); 
$rsm->addFieldResult('fd','nameDisplay','nameDisplay'); 

$query = $this->_em->createNativeQuery(
     'SELECT @id :=(SELECT parentID FROM ' . $this->_entityName .' WHERE id = @id) as id,(SELECT nameDisplay FROM ' . $this->_entityName .' WHERE id = @id) as nameDisplay 
    FROM (SELECT @id := ?) vars 
    JOIN ' . $this->_entityName .' fd 
    WHERE @id IS NOT NULL', $rsm); 

$query->setParameter(1, 8); 

$folderStructure = $query->getResult(); 

Wymień \ AppBundle \ Entity \ Folder z klasy encji i zalecana otrzymać tablicę z obiektami zamówionymi do pożądanej struktury. Nie mogę mapować również parentID do wyniku, ale uważam, że powinno wystarczyć.

Original zapytania, który został użyty jako punkt odniesienia można znaleźć here