Eloquent-Taggable 为你的 Laravel 应用添加标签功能

说明Eloquent-Taggable 提供了简便的方法为 Laravel 的 Eloquent 模型添加 标签功能

标签的逻辑
'CviebrockEloquentTaggableTaggableServiceProvider',
php artisan migrate --package=cviebrock/eloquent-taggable源代码在此:Schema::create('taggable_tags', function(Blueprint $table)
{
  $table->increments('id');
  $table->string('name');
  $table->string('normalized');
  $table->timestamps();
});
Schema::create('taggable_taggables', function(Blueprint $table)
{
  $table->integer('tag_id');
  $table->integer('taggable_id')->unsigned()->index();
  $table->string('taggable_type');
  $table->timestamps();
}); 表为标签数据表; 对应表 表结构可以看出是利用了 Eloquent ORM 的 多态对应关系(Polymorphic Relations) 功能, 见文档. return array(
     // 数组分隔符
    'delimiters' => ',;',

    // 针对 taggable_tags 表中 normalized 字段的处理
    // 此字段用作一个标签在数据库里的唯一标识符, 可以当 URL Slug 使用
    'normalizer' => 'mb_strtolower',
);use CviebrockEloquentTaggableTaggable;
use CviebrockEloquentTaggableTaggableImpl;

class MyModel extends Eloquent implements Taggable
{
    use TaggableImpl;
}

创建标签// 可以通过传参分号间隔的字串 $model->tag('Apple,Banana,Cherry'); // 也可以通过传参数组 $model->tag(['Apple', 'Banana', 'Cherry']); // 也可以一个个添加 $model->tag('Apple'); $model->tag('Banana'); $model->tag('Cherry'); // 当独接触一个标签 $model->untag('Banana'); // 解除全部标签 $model->detag();// 去除原有的标签, 然后重新打上传参的标签 $model->retag('Etrog,Fig,Grape'); // Eloquent Collection 的格式取出 foreach($model->tags as $tag) { echo $tag->name; } // string 'Apple,Banana,Cherry' (length=19) $model->tagList // array (size=3) // 1 => string 'Apple' (length=5) // 2 => string 'Banana' (length=6) // 3 => string 'Cherry' (length=6) $model->tagArray// 打了以下全部标签的文章 Model::withAllTags('apple,banana,cherry'); // 打了以下其中一个标签的文章 Model::withAnyTags('apple,banana,cherry'); // 返回有打过标签的文章 Model::withAnyTags();Laravel-Blog 项目里博客标签功能就是使用此扩展包进行开发的, 可供 参考.

整个应用由多个模块拼接起来, 大家都把精力放在维护这些通用模块上, 利用 社区. :beers:

转载请注明:代码家园 » Eloquent-Taggable 为你的 Laravel 应用添加标签功能

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)