laravel eloquent根据标签获取相关文章

Ray*_*Ray 1 many-to-many laravel eloquent

我对如何做以下事情感到有点困惑.

我有一个文章表和一个标签表,其中有多对多的连接和两者之间的数据透视表.我已经在模型中建立了关系

文章可以有多个标签.

如何根据附加到当前文章的标签轻松(?)获取文章的相关文章列表.

我试过从标签方面查询如下:

foreach($article->tags()->get() as $tag) {
    $relatedArticles .= Tag::with('articles')
    ->where('id','=', $tag->id)
    ->take(6)
    ->get();

    }
Run Code Online (Sandbox Code Playgroud)

这会产生零响应

我不确定如何从文章中查询以动态查找带有标签的文章.

因此,如果一篇文章附加了tag1和tag2,那么我想要检索所有附加了tag1或tag2的文章(理想情况是在文章日期排序).每个文章的标签都不同,可能只有一个或多个.

理想情况下,我想用一个雄辩的查询来做这个但不是必要的 - 我不知道如何在mysql中做一个起点.

任何帮助赞赏

due*_*lsy 9

如果您使用的是Laravel 4.1,您可以使用whereHas雄辩的方法执行以下操作:

$tag_ids = $article->tags()->lists('id');
$relatedArticles = Article::whereHas('tags', function($q) use ($tag_ids) {
    $q->whereIn('id', $tag_ids);
})
->orderBy('created_at')
->take(6)
->get();
Run Code Online (Sandbox Code Playgroud)

分解

这里有一些事情:

名单()

您可以lists在select上使用该方法来获取特定列,在这种情况下我们只关注ID列.

更多信息请访问:http://laravel.com/docs/queries#selects

whereHas()

我们正在使用whereHas您可以阅读的新方法.

更多关于这里:http://laravel.com/docs/eloquent#querying-relations

使用()

由于该whereHas方法接受闭包(或"匿名函数"),因此该函数无法访问外部设置的变量,因此我们需要将它们发送到函数.我们可以这样做use.

更多信息请访问:http://www.php.net/manual/en/functions.anonymous.php