1.建立laravel項目,指定版本php
composer create-project laravel/laravel test_laravel 5.3.30 --prefer-dist
2.安裝插件laravel
composer require estgroupe/laravel-taggable "5.1.*"
3.在config/app.php的服務提供者中,加入git
EstGroupe\Taggable\Providers\TaggingServiceProvider::class,
4.導出插件的配置文件github
php artisan vendor:publish --provider="EstGroupe\Taggable\Providers\TaggingServiceProvider"
5.配置好數據庫信息,運行數據庫
php artisan migrate
6.建立本身的Tag.php文件數組
<?php namespace App\Models; use EstGroupe\Taggable\Model\Tag as TaggableTag; class Tag extends TaggableTag { // Model code go here }
7.修改配置文件config/taggable.phpapp
'tag_model' => '\App\Models\Tag',
'is_tagged_label_enable' => true,
8.因爲這個插件是5.1版本的,裏面的有些方法已經被棄用,咱們須要對其進行修改:vendor/estgroupe/src/Model/ 兩個model文件,搜索lists 替換成pluckcomposer
lists => pluck
9.在運行時,會出現如下錯誤:ide
Call to a member function normalizeTagName() on null
函數
$this->taggingUtility = app(TaggingUtility::class);
在這個類中,有定義$taggingUtility 的地方所有換成 app(TaggingUtility::class)
10.在這個插件依賴的 overtrue/pinyin 插件中,原版本升級以後有個函數進行了修改,在Util.php中,搜索 permlink,對其進行如下替換
permlink=>permalink
11.建立一個測試model
<?php namespace App\Model; use EstGroupe\Taggable\Taggable; use Illuminate\Database\Eloquent\Model; class Article extends Model { use Taggable; protected $table = 'article'; }
12.進行測試
<?php namespace App\Http\Controllers; use App\Model\Article; use \EstGroupe\Taggable\Model\Tag; class Test extends Controller { public function t1() { $article = Article::first(); var_dump($article->is_tagged); $result = $article->tag('abc'); var_dump($result); var_dump($article->is_tagged); } }
附:article 數據表
CREATE TABLE `article` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `is_tagged` enum('yes','no') NOT NULL DEFAULT 'no', `content` varchar(100) DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
參考網址:
https://laravel-china.org/topics/2123
https://github.com/etrepat/baum
https://github.com/etrepat/baum
多級標籤經過測試也能夠,可是參考網站的數組定義錯誤了,會出錯。
若是修改了配置文件的表名,須要在Taggable.php文件的大概67行位置,改爲
return $this->morphToMany(static::$taggingUtility->tagModelString(), 'taggable', config('taggable.taggables_table_name'));
否則,他會去尋找taggables表