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

时间:2014-01-02 18:28:26

标签: laravel many-to-many eloquent

我对如何执行以下操作感到有点困惑。

我有一个文章表和一个包含多对多联接的标签表,以及两者之间的数据透视表。我已经在模型中建立了关系

文章可以有多个标签。

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

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

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

    }

这会产生零响应

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

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

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

任何帮助表示赞赏

1 个答案:

答案 0 :(得分: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();

击穿

这里有一些事情发生了:

列表()

您可以在select上使用lists方法获取特定列,在这种情况下我们只关注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

相关问题