我有三个主要的 mySQL 表:
我还有许多表可以根据需要将它们连接起来。
我想获取所有与用户共享相同标签的文章,以便个性化他们的体验。
(示例):说一个用户具有“特朗普”或“英国脱欧”的标签,我想抓住所有也有特朗普或英国脱欧的新闻报道。
我可以获取整个数据池并进行计算,但是这可能会不必要地占用服务器大量资源,因此是否可以通过Eloquent进行处理?
也是,Eloquent是否能够对用户标签进行统计以确定在抓取文章之前用户最感兴趣的标签,或者之后需要解决方法?
谢谢。
答案 0 :(得分:0)
Christophvh的回应最终对我有用。在与Eloquent多了一些时间之后,我发现了很多其他方法。
现在我可以对碰巧被卡住的任何人进行以下操作:
通过在我的tags
和User
模型中创建一个Article
方法来返回所有相关标签,我可以执行以下操作。
$userTags = $user->tags()->pluck('name')->get()->toArray();
$articles = Article::whereHas('tags', function($tag) use ($userTags) {
$tag->where('name', $userTags)->get();
})->get();
上面的代码应:
要创建优先级标签列表,我只需要运行array_count_values($userTags)
并按返回值对其进行排序,然后将新排序的$userTags
数组传递给Eloquent查询。