我有三个主要的 mySQL 表:
- 用户
- 标签
- 新闻文章
我还有很多表可以根据需要连接它们。
我想抓取与用户共享相同标签的所有文章,以便个性化他们的体验。
(示例):假设用户有“Trump”或“Brexit”标签,我想获取所有也有 Trump 或 Brexit 的新闻文章。
我可以抓取整个数据池并进行计算,但这可能会导致不必要的服务器密集型,那么有没有一种方法可以通过 Eloquent 来实现?
此外 Eloquent 是否能够统计用户标签以确定用户在抓取文章之前最感兴趣的标签或者之后是否需要解决方法?
提前致谢。
最佳答案
Christophvh 的回复最终对我有用。在使用 Eloquent 一段时间后,我发现了更多的方法。
对于碰巧被卡住的任何人,我现在都会采用一种方法:
通过在我的 User
和 Article
模型中创建一个 tags
方法来返回所有相关标签,然后我可以执行以下操作。
$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 查询。
关于php - laravel 使用其关系 ID 获取 Eloquent 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55247630/