簡體   English   中英

Laravel獲得帶有多個標簽的帖子

[英]Laravel get posts with multiple tags

我正在與laravel PostTag之間的Laravel belongsToMany關系合作。

我想做的是將所有Post包含多個標簽。

我已經嘗試過各種雄辯的查詢,但是我根本無法理解。

目前,我可以得到一個post_idtag_id的數組,如下所示,但是必須有一種更簡單的方法來做到這一點。

if (Request::has('tags')) {
    $tags = Tag::find(explode(',', Request::get('tags')));
}else{
    $tags = null;
}
// Get all posts tagged with the tags
$jobs = \DB::table('post_tag');
foreach ($tags as $tag) {
    $posts = $posts->orwhere('tag_id', $tag->id);
}
dd($posts->get());

這將轉儲具有任何ID的所有帖子的數組,但是我需要獲得一個post_id數組,其中包含所有tag_id

提前致謝!

最好在Post模型上使用whereHas()來渴望加載標簽,並僅獲取具有至少一個標簽的Post

$posts = Post::whereHas('tags', function($q) use ($tags)
{
    $q->whereIn('id', $tags);
})->get();

在這里, $tags只是一個標簽ID的數組。 $posts將是PostCollection 要從中獲取ID數組,您可以簡單地執行此操作...

$ids = $posts->lists('id'); 

或代替最初調用get() ,而使用...->lists('id')

如果僅查找包含所有標記的PostwhereHas將一些其他參數傳遞給whereHas函數。

$posts = Post::whereHas('tags', function($q) use ($tags)
{
    $q->whereIn('id', $tags);
}, '=', count($tags))->get();

將會發生的情況是,它將僅捕獲附加了與標簽數組中標簽數量相等的標簽數量的帖子。

如果您使用這種方法,請確保正確管理數據透視表,因為不能將某個標簽多次附加到某個模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM