Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have a Subscriber model

// Subscriber Model

id
user_id
subscribable_id
subscribable_type

public function user()
{
    return $this->belongsTo('AppUser');
}

public function subscribable()
{
    return $this->morphTo();
}

And a Topic model

// Topic Model

public function subscribers()
{
    return $this->morphMany('AppSubscriber', 'subscribable');
}

And I want to get all users through Subscriber model, to notify them like

Notification::send($topic->users, new Notification($topic));

// Topic Model


public function users()
{
    return $this->hasManyThrough('AppUser', 'AppSubscriber');
}

Any ideas?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
308 views
Welcome To Ask or Share your Answers For Others

1 Answer

// Topic Model

public function users()
{
    return $this->hasManyThrough('AppUser', 'AppSubscriber', 'subscribable_id')
        ->where(
            'subscribable_type', 
            array_search(static::class, Relation::morphMap()) ?: static::class
        );
}

Polymorphic hasManyThrough relationships are the same as any others, but with an added constraint on the subscribable_type, which can be retrieved from the Relation::morphMap() array, or by using the class name directly.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...