LaravelPackages.net
Acme Inc.
Toggle sidebar
vergil-lai/node-categories

Node categories model and observer for laravel 5

574
22
v1.1.4
About vergil-lai/node-categories

vergil-lai/node-categories is a Laravel package for node categories model and observer for laravel 5. It currently has 22 GitHub stars and 574 downloads on Packagist (latest version v1.1.4). Install it with composer require vergil-lai/node-categories. Discover more Laravel packages by vergil-lai or browse all Laravel packages to compare alternatives.

Last updated

node-categories

Node categories model and observer for laravel 5

Install

 composer require vergil-lai/node-categories

Configure

在你的项目目录config/app.php的providers数组里加入:

VergilLai\NodeCategories\NodeCategoriesProvider::class

使用说明

运行artisan

创建migration并运行migrate:

$ php artisan node-categories:migration

默认的数据表名是categories,如果需要指定数据表名,需要加上参数--table,例如:

$ php artisan node-categories:migration --table=mytable

创建模型

使用artisan创建模型,例如:

$ php artisan make:model Cateory

然后,让你的模型use trait NodeCategoryTrait

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use \VergilLai\NodeCategories\NodeCategoryTrait;
}

添加模型观察者

在/app/Providers/EventServiceProvider.php的boot方法里添加:

Category::observe(\VergilLai\NodeCategories\Observer::class);

Example

Create

$parent1 = new Category();
$parent1->name = 'Parent 1';
$parent1->save();

$parent2 = new Category();
$parent2->name = 'Parent 2';
$parent2->save();

$parent3 = new Category();
$parent3->name = 'Parent 3';
$parent3->save();

$parent4 = new Category();
$parent4->name = 'Parent 4';
$parent4->save();

$parent5 = new Category();
$parent5->name = 'Parent 5';
$parent5->save();

$child1 = new Category();
$child1->parent_id = $parent1->id;     //把parent_id字段设置为上级分类的id
$child1->name = 'Child 1';
$child1->save();

$child2 = new Category();
$child2->parent_id = $parent1->id;
$child2->name = 'Child 2';
$child2->save();

$child3 = new Category();
$child3->parent_id = $parent1->id;
$child3->name = 'Child 3';
$child3->save();

$grandchild1 = new Category();
$grandchild1->parent_id = $child1->id;
$grandchild1->name = 'Grandchild 1';
$grandchild1->save();

$grandchild2 = new Category();
$grandchild2->parent_id = $child1->id;
$grandchild2->name = 'Grandchild 2';
$grandchild2->save();

结果:

+----+--------+-------+--------------+----------+
| id | parent | level | name         | node     |
+----+--------+-------+--------------+----------+
|  1 |      0 |     1 | Parent 1     | ,1,      |
|  2 |      0 |     1 | Parent 2     | ,2,      |
|  3 |      0 |     1 | Parent 3     | ,3,      |
|  4 |      0 |     1 | Parent 4     | ,4,      |
|  5 |      0 |     1 | Parent 5     | ,5,      |
|  6 |      1 |     2 | Child 1      | ,1,6,    |
|  7 |      1 |     2 | Child 2      | ,1,7,    |
|  8 |      1 |     2 | Child 3      | ,1,8,    |
|  9 |      6 |     3 | Grandchild 1 | ,1,6,9,  |
| 10 |      6 |     3 | Grandchild 2 | ,1,6,10, |
+----+--------+-------+--------------+----------+

Update parent

$child1 = Category::find(6);
$child1->parent_id = 4;        //修改为id为4的子类
$child1->save();

结果:

+----+-----------+-------+--------------+----------+
| id | parent_id | level | name         | node     |
+----+-----------+-------+--------------+----------+
|  1 |         0 |     1 | Parent 1     | ,1,      |
|  2 |         0 |     1 | Parent 2     | ,2,      |
|  3 |         0 |     1 | Parent 3     | ,3,      |
|  4 |         0 |     1 | Parent 4     | ,4,      |
|  5 |         0 |     1 | Parent 5     | ,5,      |
|  6 |         4 |     2 | Child 1      | ,4,6,    |
|  7 |         1 |     2 | Child 2      | ,1,7,    |
|  8 |         1 |     2 | Child 3      | ,1,8,    |
|  9 |         6 |     4 | Grandchild 1 | ,4,6,9,  |
| 10 |         6 |     4 | Grandchild 2 | ,4,6,10, |
+----+-----------+-------+--------------+----------+

Delete

$parent4 = Category::find(4);
$parent4->delete();

结果:

+----+-----------+-------+----------+-------+
| id | parent_id | level | name     | node  |
+----+-----------+-------+----------+-------+
|  1 |         0 |     1 | Parent 1 | ,1,   |
|  2 |         0 |     1 | Parent 2 | ,2,   |
|  3 |         0 |     1 | Parent 3 | ,3,   |
|  5 |         0 |     1 | Parent 5 | ,5,   |
|  7 |         1 |     2 | Child 2  | ,1,7, |
|  8 |         1 |     2 | Child 3  | ,1,8, |
+----+-----------+-------+----------+-------+

Trait Methods

public \Illuminate\Database\Eloquent\Collection childrens(void)

获取所有子分类

$parent1 = Category::find(1);
dd($parent1->childrens());

public \Illuminate\Database\Eloquent\Collection getParent(void)

获取上级分类

$child1 = Category::find(6);
dd($child1->getParent());

You can use BelongTo Relation

$child1 = Category::find(6);
dd($child1->parent);

public \Illuminate\Database\Eloquent\Collection parents(void)

获取所有父分类


public static array getTree(callable $map = null)

public array tree(callable $map = null)

获取树数据结构

$map callable 处理原始数据的map方法,用于集合

$tree = Category::getTree(function($item) {
    $item->title = $item->name;
});

Comments