我很难在laravel中搞清楚这一点;对于订户关系,我们有2个数据透视表:
订阅者可以订阅问题:
question_subscriber
id question_id subscriber_id
1 2 3
2 2 4
3 3 1
4 3 2
订阅者可以订阅用户:
user_subscriber
id user_id subscriber_id
1 1 6
2 1 7
3 2 1
问题所有者的正常问题表:
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
的所有检索订阅者:
6 // subscribed to directly
7 // subscribed to directly
3 // subscribed to through question
4 // subscribed to through question
有关Laravel最有效的方法吗?
答案 0 :(得分:1)
这将是最简单的方法:
// 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);