recherche
Maisondéveloppement back-endtutoriel phplaravel implémente une classification infinie

laravel implémente une classification infinie

Feb 22, 2017 pm 02:00 PM
laravel无限极分类

Explication

Tout le monde utilise généralement la récursivité pour implémenter la classification infinie. Nous savons tous que la récursion est très inefficace. Voici un package d'extension Laravel recommandé. etrepat/baum, faites en sorte que votre modèle de données prenne rapidement en charge une structure hiérarchique arborescente infinie, tout en tenant compte de l'efficacité.

Utilisez le modèle d'ensemble imbriqué Baum pour implémenter la classification infinie du modèle Laravel

La documentation officielle du package d'extension a un espace pour l'explication, et l'image ci-dessous est aussi un Exemple simple :

laravel implémente une classification infinie

Description du cas d'utilisation #

Parlons ensuite de quelques exemples de modèles hiérarchiques d'arbres infinis.

Système de balises#

Référence : Laravel Taggable Ajoutez une fonction de balisage à votre modèle. Une balise peut avoir d'innombrables balises enfants, appartenir à une balise parent et avoir plusieurs balises homologues.

Par exemple, l'arborescence des balises ci-dessous :

$tagTree = [
    'name' => 'RootTag',
    'children' => [
        ['name' => 'L1Child1',
            'children' => [
                ['name' => 'L2Child1'],
                ['name' => 'L2Child1'],
                ['name' => 'L2Child1'],
            ]
        ],
        ['name' => 'L1Child2'],
        ['name' => 'L1Child3'],
    ]];

Système de commentaires #

Commentaires imbriqués à l'infini, comme le système de commentaires de NetEase.

laravel implémente une classification infinie

Laravel a une extension de commentaire qui prend en charge l'imbrication infinie, voir Slynova-Org/laravel-commentable.

Modèle de données "Barre de navigation"#

L'arrière-plan de l'administrateur doit fournir une fonction de personnalisation de la "barre de navigation" et une barre de navigation arborescente.

laravel implémente une classification infinie

Baum#

etrepat/baum intégré permet rapidement à votre modèle de données de prendre en charge la structure hiérarchique arborescente Infinitus tout en prenant en compte l'efficacité.

Ensuite, nous parlerons de la façon d'intégrer.

1. Installation de Composer#

composer require "baum/baum:~1.1"

2. Ajouter un fournisseur#

Modifiez le fichier config/app.php et ajoutez : providers array>

'Baum\Providers\BaumServiceProvider',
Ce fournisseur de services enregistre deux commandes :

, artisan baum. artisan  baum.install

3. Créez la migration#

et installez-la sur le modèle de données existant :

php artisan baum:install MODEL
Exécutez ensuite

php artisan migrate
sur les champs de migration Introduction#

  • parent_id : l'identifiant du nœud parent

  • lft : la valeur de l'index gauche

  • rgt : Valeur d'index à droite

  • profondeur : Niveau de profondeur

Ce qui suit est un exemple :

class Category extends Migration {
  public function up() {
    Schema::create('categories', function(Blueprint $table) {
      $table->increments('id');

         // 这四行代码
      $table->integer('parent_id')->nullable();
      $table->integer('lft')->nullable();
      $table->integer('rgt')->nullable();
      $table->integer('depth')->nullable();

      $table->string('name', 255);

      $table->timestamps();
    });
  }}
4. Configurez le modèle de données #

Hériter BaumNode

class Category extends Baum\Node {}
Après l'héritage, ces propriétés peuvent être remplacées :

class Category extends Baum\Node {
  protected $table = 'categories';

  // 'parent_id' column name
  protected $parentColumn = 'parent_id';

  // 'lft' column name
  protected $leftColumn = 'lidx';

  // 'rgt' column name
  protected $rightColumn = 'ridx';

  // 'depth' column name
  protected $depthColumn = 'nesting';

  // guard attributes from mass-assignment
  protected $guarded = array('id', 'parent_id', 'lidx', 'ridx', 'nesting');}
L'intégration est réussie.

Utiliser

$root = Tag::create(['name' => 'Root']);

// 创建子标签
$child1 = $root->children()->create(['name' => 'Child1']);

$child = Tag::create(['name' => 'Child2']);
$child->makeChildOf($root);

// 批量构建树
$tagTree = [
    'name' => 'RootTag',
    'children' => [
        ['name' => 'L1Child1',
            'children' => [
                ['name' => 'L2Child1'],
                ['name' => 'L2Child1'],
                ['name' => 'L2Child1'],
            ]
        ],
        ['name' => 'L1Child2'],
        ['name' => 'L1Child3'],
    ]
];

Tag::buildTree($tagTree);


Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Y a-t-il des alternatives aux séances PHP?Y a-t-il des alternatives aux séances PHP?Apr 29, 2025 am 12:36 AM

Les alternatives aux séances PHP comprennent des cookies, une authentification basée sur des jetons, des sessions basées sur la base de données et Redis / Memcached. 1.CooKies Gérer les sessions en stockant des données sur le client, ce qui est simple mais faible en sécurité. 2. L'authentification basée sur le token utilise des jetons pour vérifier les utilisateurs, ce qui est hautement sécurisé mais nécessite une logique supplémentaire. 3.Database basée sur les séances stocke les données dans la base de données, qui a une bonne évolutivité mais peut affecter les performances. 4. redis / memcached utilise un cache distribué pour améliorer les performances et l'évolutivité, mais nécessite une correspondance supplémentaire

Quelle est la forme complète de PHP?Quelle est la forme complète de PHP?Apr 28, 2025 pm 04:58 PM

L'article traite de PHP, détaillant sa forme complète, les principales utilisations du développement Web, la comparaison avec Python et Java, et sa facilité d'apprentissage pour les débutants.

Comment PHP gère-t-il les données de formulaire?Comment PHP gère-t-il les données de formulaire?Apr 28, 2025 pm 04:57 PM

PHP gère les données de formulaire à l'aide de $ \ _ Post et $ \ _ obtiennent des superglobaux, avec la sécurité assurée par la validation, la désinfection et les interactions de base de données sécurisées.

Quelle est la différence entre PHP et ASP.NET?Quelle est la différence entre PHP et ASP.NET?Apr 28, 2025 pm 04:56 PM

L'article compare PHP et ASP.NET, en se concentrant sur leur pertinence pour les applications Web à grande échelle, les différences de performances et les fonctionnalités de sécurité. Les deux sont viables pour les grands projets, mais PHP est open-source et indépendant de la plate-forme, tandis que ASP.NET,

PHP est-il un langage sensible à la cas?PHP est-il un langage sensible à la cas?Apr 28, 2025 pm 04:55 PM

La sensibilité à la caisse de PHP varie: les fonctions sont insensibles, tandis que les variables et les classes sont sensibles. Les meilleures pratiques incluent la dénomination cohérente et l'utilisation de fonctions insensibles à des cas pour les comparaisons.

Comment redirigez-vous une page en PHP?Comment redirigez-vous une page en PHP?Apr 28, 2025 pm 04:54 PM

L'article traite de diverses méthodes de redirection de pages en PHP, en se concentrant sur la fonction d'en-tête () et en abordant des problèmes communs tels que "les en-têtes ont déjà envoyé" des erreurs.

Expliquez la conduite de types en phpExpliquez la conduite de types en phpApr 28, 2025 pm 04:52 PM

L'article traite de type de type en php, une fonctionnalité pour spécifier les types de données attendues dans les fonctions. Le principal problème est d'améliorer la qualité et la lisibilité du code grâce à l'application de type.

Qu'est-ce que l'APD dans PHP?Qu'est-ce que l'APD dans PHP?Apr 28, 2025 pm 04:51 PM

L'article traite des objets de données PHP (PDO), une extension pour l'accès à la base de données dans PHP. Il met en évidence le rôle de PDO dans l'amélioration de la sécurité grâce à des instructions préparées et à ses avantages sur MySQLI, y compris l'abstraction de la base de données et une meilleure gestion des erreurs.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.