You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查Laravel模型是否包含指定的Spatie Tag?

Laravel Spatie Tags 检查用户是否包含指定标签的正确方法

因为Spatie Tags的标签名称以多语言JSON格式存储(如{"en": "Midtown"}),直接使用集合的contains('Midtown')无法匹配到对应标签,以下是官方推荐的解决方案:

1. 使用内置的hasTag()方法(推荐)

关联了Tags的模型(比如你的User模型)自带hasTag()方法,能自动处理多语言字段的匹配逻辑:

// 适配当前应用语言检查标签
$hasMidtownTag = $user->hasTag('Midtown');

// 指定语言精准匹配
$hasMidtownTag = $user->hasTag(['en' => 'Midtown']);

这个方法还支持多种传入类型,灵活度很高:

// 检查是否包含多个标签中的任意一个
$user->hasTag(['Midtown', 'Downtown']);

// 检查是否同时包含所有指定标签
$user->hasAllTags(['Midtown', 'Downtown']);

// 传入Tag模型实例或标签ID也可以
$tag = Tag::find(1);
$user->hasTag($tag);

2. 手动操作集合的方式

如果需要自定义匹配逻辑,可通过集合的回调方法或JSON字段查询来实现:

// 用contains回调检查指定语言的标签名称
$hasMidtownTag = $user->tags->contains(function ($tag) {
    return $tag->name['en'] === 'Midtown';
});

// 用where结合isNotEmpty判断
$hasMidtownTag = $user->tags->where('name->en', 'Midtown')->isNotEmpty();

内容的提问来源于stack exchange,提问作者Dylan Glockler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:51:19