2 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
查詢
如果您只是在尋找標(biāo)簽名稱的不同列表,您可以組合distinct()方法和pluck()方法:
$tags = Tag::distinct()->pluck('name');
這將為您提供系統(tǒng)中所有唯一標(biāo)簽名稱的集合。
如果您確實(shí)需要擁有 Tag 模型實(shí)例,您可以嘗試兩件事。
首先,如果你有完全重復(fù)的標(biāo)簽行,你可以添加distinct()到你的標(biāo)簽查詢中(因?yàn)槟阈枰薷牟樵?,你需要?using 更改all()為get()(在此處閱讀更多):
$tags = Tag::distinct()->get();
其次,如果您的標(biāo)簽有其他不明確的信息(ID、時(shí)間戳等),那將不起作用。如果是這種情況,您需要使用子查詢來選擇您想要的標(biāo)簽:
$tags = Tag::whereIn('id', Tag::groupBy('name')->selectRaw('MAX(id)'))->get();
這將為您的唯一名稱集提供完全填充的 Tag 模型實(shí)例。
收藏
最后,如果您已經(jīng)有一個(gè) Tag 實(shí)例的集合,并且您想根據(jù)名稱獲得一個(gè)唯一的集合,您可以u(píng)nique在集合上使用該方法。
// somewhere
$tags = Tag::get();
// somewhere else
$tags = $tags->unique('name');
如果您還沒有該集合,請(qǐng)確保使用上述查詢構(gòu)建器方法之一。如果使用collection方式,則必須先構(gòu)建并水化所有Tag模型實(shí)例,然后再進(jìn)行唯一處理。您不希望獲取和水合 10000 個(gè)標(biāo)簽?zāi)P蛯?shí)例以最終得到 30 個(gè)獨(dú)特的標(biāo)簽,而此時(shí)您可以首先從數(shù)據(jù)庫中獲取這 30 個(gè)標(biāo)簽。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
您可以unique()
在集合上使用該方法,即:
$tags = Tag::all()->unique('name');
使用您的描述符字段而不是name
.
該distinct()
方法最好與有限的字段選擇一起使用,例如:
DB::table('tags')->distinct()->get(['name']);
如果你使用distinct()
on Model
likeTag::distinct()->get();
你會(huì)得到所有的標(biāo)簽,因?yàn)樗鼈冇胁煌?code>ids,timestamps
即使它們有相同的名稱或描述,因?yàn)樵谶@種情況下,選擇是在所有字段上。
使用模型,您必須像這樣限制返回的字段:
Tag::distinct()->get(['name']);
- 2 回答
- 0 關(guān)注
- 138 瀏覽
添加回答
舉報(bào)