Système de gestion des commentaires d'arbre hiérarchique pour Laravel

Un package pour le framework  Laravel qui vous permet d'organiser la gestion des commentaires arborescents. Une symbiose de deux méthodes de stockage des structures hiérarchiques est utilisée -  "Closure Table"  et  "Adjacency List" .

Exigences

  • Laravel 5.7 ou cadre plus récent.

  • La version PHP est au moins 7.3.

Dépôt

https://github.com/drandin/closure-table-comments

Avantages

L'utilisation combinée des méthodes Closure Table et Adjacency List permet:

  • Réduisez le nombre de requêtes de base de données. Une requête suffit pour récupérer un fil de commentaires.

  • Fournir des performances élevées. Les requêtes de lecture vers la base de données sont simples et la vitesse de sélection des nœuds de hiérarchie ne diminue pratiquement pas avec une augmentation de la quantité de données.

  • Stockez le texte des commentaires et la structure hiérarchique séparément l'un de l'autre, dans deux tableaux.

  • Contrôlez la profondeur de l'imbrication des commentaires. Le niveau des nœuds dans la hiérarchie est toujours connu, il n'est pas nécessaire d'obtenir des informations sur les ancêtres d'un nœud pour le déterminer.

  • Assurer l'intégrité des données de la hiérarchie. L'ajout de nouveaux nœuds à la hiérarchie ne nécessite aucune modification des liens des nœuds créés précédemment.

  • SQL-. , , .

. .

 «Adjacency List», , .

 «Path Enumeration»,  «Materialized Path» - SQL- SELECT, LIKE : '%/2/3/4%'. , .

— «Nested Sets». , . . «Nested Sets».

 «Closure Table»  , «» — .

«Closure Table» «Adjacency List» . 

 «Closure Table» «Adjacency List»:

Liens d'éléments de l'arborescence "Closure Table" combinés avec la "Liste d'Adjacence"
 «Closure Table» «Adjacency List»

 «Closure Table»  . 

«Adjacency List»  .

, , .

1.  Laravel  :

composer require drandin/closure-table-comments

2.  config/app.php -.  'providers'.

\Drandin\ClosureTableComments\ClosureTableServiceProvider::class,

3. ,  closure-table-comments.php   config  :

php artisan vendor:publish --tag=config

,  config/closure-table-comments.php  . , ,  .

4.  , :

php artisan config:cache

5. . , :

php artisan migrate

 2   .

, . 

, ,  «»  , .

 Comment  StructureTree.

subject_id —  «».  NULL

 subject_id  NULL, - .

user_id —  « ».  NULL

 user_id  NULL, - . .

1. . 

,  «»   5636   7  .

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());

$comment = " .    .";
    
$id = $commentator
        ->setSubjectId(5636)
        ->addCommentToRoot($comment, 7);

 $id,  5636.  7.

2. , . 

,  «»   5636   43  .

(  Node), . ,  1.

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());
  
$comment = "   ,    .";
  
$id = $commentator
       ->setSubjectId(5636)
       ->replyToComment(1, $comment, 43);

 $id,  5636.  43.

, (  1). , (level) , .

3. . 

.

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());
  
$comment = " .  .";
  
$res = $commentator->editComment(1, $comment);

,  $res   true.

4. . 

( ) .

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());
  
$res = $commentator->has(2);

2 ,  $res   true.

5. ( ) . 

,  Node  ,  2.

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());
  
$node = $commentator->getNode(2);

,  2 ,  getNode   Node.  Node  .

6. .

 5636, . . , .

, . . . , , .

 getTreeBranch.

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());
  
$nodes = $commentator
             ->setSubjectId(5636)
             ->getTreeBranch();

 Node.

,  getTreeBranch  .

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());
  
$nodes = $commentator
             ->setSubjectId(5636)
             ->getTreeBranch(2);

 2.

7. . 

 getTreeBranchArray.

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());
  
$tree = $commentator
          ->setSubjectId(5636)
          ->getTreeBranchArray();

, ,  getTreeBranchArray .

8. . 

,  23.

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());
  
$ids = $commentator->getBranchIds(23);

 $ids  .

9. . 

,  23  ,  Node  getNode  , . ,  getLevel.

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());
  
$level = $commentator->getLevel(23);

10. () . 

( ),  delete.

 delete  , , .

 64  , .

use Drandin\ClosureTableComments\ClosureTableService;
use Drandin\ClosureTableComments\Commentator;

$commentator = new Commentator(new ClosureTableService());
  
$res = $commentator->delete(64);

, .

«Closure Table» 

 «Closure Table»  , , . , . , , .

, , «Closure Table» , .

, . 

, , , , . 

, . , , , . 

, , , .

  1. «Closure Table» «Adjacency List» https://habr.com/ru/post/263629/. 2015 .

  2. «Stack Overflow». MySQL Closure Table hierarchical ? http://stackoverflow.com/questions/8252323/mysql-closure-table-hierarchical-database-how-to-pull-information-out-in-the-c,  ? http://stackoverflow.com/questions/192220/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tree.

  3. (Bill Karwin). http://www.slideshare.net/billkarwin/models-for-hierarchical-data.

  4. Stockage des arbres dans la base de données. Première partie, théorique https://habr.com/ru/post/193166/ . année 2013.




All Articles