猿问

如何获得价值的第一个实例?

我想在我的博客应用程序中构建一个标签列表?我想选择所有标签,如果该标签存在多次,只选择一次?

这就是我获得所有标签的方式!如何让每个标签只获得一次?

$tags = Tag::all();


喵喵时光机
浏览 124回答 2
2回答

慕慕森

查询如果您只是在寻找标签名称的不同列表,您可以组合distinct()方法和pluck()方法:$tags = Tag::distinct()->pluck('name');这将为您提供系统中所有唯一标签名称的集合。如果您确实需要拥有 Tag 模型实例,您可以尝试两件事。首先,如果你有完全重复的标签行,你可以添加distinct()到你的标签查询中(因为你需要修改查询,你需要从 using 更改all()为get()(在此处阅读更多):$tags = Tag::distinct()->get();其次,如果您的标签有其他不明确的信息(ID、时间戳等),那将不起作用。如果是这种情况,您需要使用子查询来选择您想要的标签:$tags = Tag::whereIn('id', Tag::groupBy('name')->selectRaw('MAX(id)'))->get();这将为您的唯一名称集提供完全填充的 Tag 模型实例。收藏最后,如果您已经有一个 Tag 实例的集合,并且您想根据名称获得一个唯一的集合,您可以unique在集合上使用该方法。// somewhere$tags = Tag::get();// somewhere else$tags = $tags->unique('name');如果您还没有该集合,请确保使用上述查询构建器方法之一。如果使用collection方式,则必须先构建并水化所有Tag模型实例,然后再进行唯一处理。您不希望获取和水合 10000 个标签模型实例以最终得到 30 个独特的标签,而此时您可以首先从数据库中获取这 30 个标签。

开心每一天1111

您可以unique()在集合上使用该方法,即:$tags = Tag::all()->unique('name');使用您的描述符字段而不是name.该distinct()方法最好与有限的字段选择一起使用,例如:DB::table('tags')->distinct()->get(['name']);如果你使用distinct()on ModellikeTag::distinct()->get();你会得到所有的标签,因为它们有不同的ids,timestamps即使它们有相同的名称或描述,因为在这种情况下,选择是在所有字段上。使用模型,您必须像这样限制返回的字段:Tag::distinct()->get(['name']);
随时随地看视频慕课网APP
我要回答