laravel使用其关系ID获得雄辩的数据

时间:2019-03-19 18:19:49

标签: php mysql laravel laravel-5 eloquent

我有三个主要的 mySQL 表:

  • 用户
  • 标签
  • news_articles

我还有许多表可以根据需要将它们连接起来。

我想获取所有与用户共享相同标签的文章,以便个性化他们的体验。

(示例):说一个用户具有“特朗普”或“英国脱欧”的标签,我想抓住所有也有特朗普或英国脱欧的新闻报道。

我可以获取整个数据池并进行计算,但是这可能会不必要地占用服务器大量资源,因此是否可以通过Eloquent进行处理?

也是,Eloquent是否能够对用户标签进行统计以确定在抓取文章之前用户最感兴趣的标签,或者之后需要解决方法?

谢谢。

1 个答案:

答案 0 :(得分:0)

Christophvh的回应最终对我有用。在与Eloquent多了一些时间之后,我发现了很多其他方法。

现在我可以对碰巧被卡住的任何人进行以下操作:

通过在我的tagsUser模型中创建一个Article方法来返回所有相关标签,我可以执行以下操作。

$userTags = $user->tags()->pluck('name')->get()->toArray();

$articles = Article::whereHas('tags', function($tag) use ($userTags) {
    $tag->where('name', $userTags)->get();
})->get();

上面的代码应:

  • 仅获取属于用户的所有标签的名称字段,并将它们存储在数组中。
  • 获取所有相关标签名称字段包含$ userTags变量中任何标签的文章

要创建优先级标签列表,我只需要运行array_count_values($userTags)并按返回值对其进行排序,然后将新排序的$userTags数组传递给Eloquent查询。