[英]Laravel get posts with multiple tags
我正在與laravel Post
和Tag
之間的Laravel belongsToMany
關系合作。
我想做的是將所有Post
包含多個標簽。
我已經嘗試過各種雄辯的查詢,但是我根本無法理解。
目前,我可以得到一個post_id
和tag_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
將是Post
的Collection
。 要從中獲取ID數組,您可以簡單地執行此操作...
$ids = $posts->lists('id');
或代替最初調用get()
,而使用...->lists('id')
如果僅查找包含所有標記的Post
, whereHas
將一些其他參數傳遞給whereHas
函數。
$posts = Post::whereHas('tags', function($q) use ($tags)
{
$q->whereIn('id', $tags);
}, '=', count($tags))->get();
將會發生的情況是,它將僅捕獲附加了與標簽數組中標簽數量相等的標簽數量的帖子。
如果您使用這種方法,請確保正確管理數據透視表,因為不能將某個標簽多次附加到某個模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.