Область полиморфных отношений Laravel по полю опорных точек - PullRequest
0 голосов
/ 26 июня 2019

У меня есть следующие полиморфные отношения:

// User.php
public function regions()
{
    return $this->morphedByMany('App\Region', 'relationship')->withPivot('relationship_level');
}

public function groups()
{
    return $this->morphedByMany('App\Group', 'relationship')->withPivot('relationship_level');
}

Сводная таблица выглядит следующим образом:

id | user_id | relationship_id | relationship_type | relationship_level
 1 |      12 |               8 |        App\Region |             master
 2 |      18 |              12 |         App\Group |                fan

Есть ли способ (желательно в качестве области действия), где я могу получить каждого пользователя с уровнем «мастер», когда у этого пользователя может быть много relationship level ко многим relationship_type.

1 Ответ

0 голосов
/ 26 июня 2019

Использование существующих отношений:

User::whereHas('groups', function ($query) {
    $query->where('relationship_level', 'master');
})->orWhereHas('regions', function ($query) {
    $query->where('relationship_level', 'master');
})->get();

Использование сводной модели и новых отношений (быстрее):

class Relationship extends \Illuminate\Database\Eloquent\Relations\MorphPivot
{
    //
}

class User extends Model
{
    public function relationships()
    {
        return $this->hasMany(Relationship::class);
    }
}

User::whereHas('relationships', function ($query) {
    $query->where('relationship_level', 'master');
})->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...