亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲得價值的第一個實例?

如何獲得價值的第一個實例?

PHP
喵喵時光機 2021-11-13 14:57:34
我想在我的博客應用程序中構建一個標簽列表?我想選擇所有標簽,如果該標簽存在多次,只選擇一次?這就是我獲得所有標簽的方式!如何讓每個標簽只獲得一次?$tags = Tag::all();
查看完整描述

2 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

查詢


如果您只是在尋找標簽名稱的不同列表,您可以組合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 個標簽。


查看完整回答
反對 回復 2021-11-13
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

您可以unique()集合上使用該方法,即:

$tags = Tag::all()->unique('name');

使用您的描述符字段而不是name.

distinct()方法最好與有限的字段選擇一起使用,例如:

DB::table('tags')->distinct()->get(['name']);

如果你使用distinct()on ModellikeTag::distinct()->get();你會得到所有的標簽,因為它們有不同的idstimestamps即使它們有相同的名稱或描述,因為在這種情況下,選擇是在所有字段上。

使用模型,您必須像這樣限制返回的字段:

Tag::distinct()->get(['name']);


查看完整回答
反對 回復 2021-11-13
  • 2 回答
  • 0 關注
  • 145 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號