首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel -检索直接/间接枢轴表订阅服务器

Laravel -检索直接/间接枢轴表订阅服务器
EN

Stack Overflow用户
提问于 2014-12-02 03:01:45
回答 1查看 194关注 0票数 0

我很难用laravel计算出这一点;对于订阅者关系,我们有两个枢轴表:

订阅者可以订阅以下问题:

代码语言:javascript
复制
question_subscriber
id   question_id  subscriber_id
1        2            3
2        2            4
3        3            1
4        3            2

订阅者可以订阅用户:

代码语言:javascript
复制
user_subscriber
id  user_id  subscriber_id
1      1         6
2      1         7
3      2         1

有问题所有者的普通问题表:

代码语言:javascript
复制
questions
id  question  user_id
1     abc?       1
2     xyz?       1
3     123?       2

在它们的模型中正确地设置了枢轴关系,并且我可以使用foreach、问题订阅者、$question->subscribersQuestion as $subscriber或用户$user->subscribersUser as $subscriber来提取。

但是,我们如何提取属于用户的所有订阅者(直接或间接地(通过他们拥有的问题))?

例如,这些应该都是为user 1检索的订阅服务器。

代码语言:javascript
复制
6 // subscribed to directly
7 // subscribed to directly
3 // subscribed to through question
4 // subscribed to through question

你知道在Laravel最有效的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-03 09:44:21

这将是最简单的方法:

代码语言:javascript
复制
// assuming this setup: 
User hasMany Question
User belongsToMany User (subscribers - direct)
Question belongsToMany User (subscribers - indirect)

// we don't need this, since we pass it by reference to the closure,
// but for clarity let's initialize this variable:
$indirectSubscribers = null;

$user = User::with(['questions.subscribers' => function ($q) use (&$indirectSubscribers) {
  // get all indirect subscribers (cost of additional query)
  $indirectSubscribers = $q->get()->unique();
}])->find($userId);

// merge with directs subscribers
$allSubscribers = $user->subscribers->merge($indirectSubscribers);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27241168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档