【问题标题】:laravel eloquent get related articles based on a taglaravel eloquent 根据标签获取相关文章
【发布时间】:2014-01-20 06:43:35
【问题描述】:

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

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

一篇文章可以有多个标签。

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

我尝试从标签端查询如下:

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

    }

这会产生一个零响应

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

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

理想情况下,我想用一个雄辩的查询来做到这一点,但不是必需的——我不知道如何在 mysql 中作为起点。

任何帮助表示赞赏

【问题讨论】:

    标签: laravel many-to-many eloquent


    【解决方案1】:

    如果你使用的是 Laravel 4.1,你可以使用 whereHas eloquent 方法来做这样的事情:

    $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

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多