Laravel получить все записи из таблицы, кроме тех, которые уже связаны в сводной таблице - PullRequest
1 голос
/ 29 апреля 2020

У меня есть три таблицы:

Отделы таблиц:

|------|-------------|
|  id  |     name    |
|------|-------------|
|  1   | Department1 |
|  2   | Department2 |
|  3   | Department3 |
|------|-------------|

Группы таблиц:

|------|--------|
|  id  |  name  |
|------|--------|
|  1   | Group1 |
|  2   | Group2 |
|------|--------|

Группа отделов таблиц:

|------|---------------|---------------|
|  id  |    group_id   | department_id |  
|------|---------------|---------------|
|  1   |       1       |       1       |
|  2   |       2       |       2       |
|------|---------------|---------------|

Мне нужно получить все записи из таблицы отделов, которые не связаны с group_id 1 в таблице отдела_группы. Итак, в этом примере я хочу, чтобы Department2 и Department3 для Group1 и Department1 и Department3 для Group2.

Я знаю, как написать запрос MySql для этого, но есть способ использовать отношения Eloquent?

Заранее благодарю за ответ Фабио

РЕДАКТИРОВАТЬ: Модели:

class Group extends Model
{
    protected $table = 'groups';

    protected $fillable = [
        'name'
    ];

    public function departmentGroups() {
        return $this->hasMany(DepartmentGroup::class, 'group_id','id');
    }



class Department extends Model
{
    protected $table = 'departments';

    protected $fillable = [
        'name'
    ];

    public function departmentGroups() {
        return $this->hasMany(DepartmentGroup::class, 'department_id','id');
    }

1 Ответ

2 голосов
/ 29 апреля 2020

Вам нужно иметь правильные отношения Many to Many на месте (https://laravel.com/docs/7.x/eloquent-relationships#many-ко-многим ), и тогда вы можете легко использовать whereDoesntHave()

class Group extends Model
{
    ...
    public function departments() {
        return $this->belongsToMany(Department::class, 'department_group');
    }
}


class Department extends Model
{
    ...
    public function groups() {
        return $this->belongsToMany(Group::class, 'department_group');
    }

    $departmentsNotAssociated = Department::whereDoesntHave('groups', function($query) {
        $query->where('id', '=' , 1)
    })->get();

Подробнее об этом вы можете узнать в документации: https://laravel.com/docs/7.x/eloquent-relationships#querying -relationhip-отсутствие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...