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中做一个起点.
任何帮助赞赏
如果您使用的是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您可以阅读的新方法.
更多关于这里:http://laravel.com/docs/eloquent#querying-relations
由于该whereHas方法接受闭包(或"匿名函数"),因此该函数无法访问外部设置的变量,因此我们需要将它们发送到函数.我们可以这样做use.
更多信息请访问:http://www.php.net/manual/en/functions.anonymous.php
| 归档时间: |
|
| 查看次数: |
3142 次 |
| 最近记录: |