Laravel: правильное обращение ко многим отношениям - PullRequest
0 голосов
/ 15 октября 2018

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

Таблица 1: Файлы

  • id
  • title

Таблица 2: Пулы

  • id
  • title
  • is_visible (1,0)

Таблица 3: file_pools

  • file_id
  • pool_id

Все модели и отношения на месте.

A File может принадлежать ни одному, 1 или нескольким пулам

A Pool может не иметь ни одного, 1 или более файлов

Теперь я хотел бы создать область действия visible в модели File, такую ​​что:

  • запрос включает в себя любой файл, который принадлежит ни одному или 1, или более активным пулам
  • не должен включать в себя любой файл, имеющий хотя бы 1 невидимый (is_visible = 0) пул, даже если этот файл принадлежитеще один видимый пул

Ниже приведено то, что я пробовал, но сюда входят файлы, которые находятся как в видимых, так и в невидимых пулах

public function scopeVisible($query)
{
    return $query->doesntHave('pools')->orWhereHas('pools', function ($query) {
        $query->where('is_visible',1);
    });
}

любая помощь приветствуется

РЕДАКТИРОВАТЬ: Добавить образец данных

table: files

| id       |      title    |  
|----------|---------------|
| 1        |  File A       |
| 2        |  File B       |
| 3        |  File C       |
| 4        |  File D       |

table: pools

| id       |    title      | is_visible|  
|----------|---------------|---------- |
| 1        |  Pool 1       | 1         |
| 2        |  Pool 2       | 0         |

table: file_pools

| file_id  |     pool_id   |  
|----------|---------------|
| 1        |  1            |
| 2        |  2            |
| 3        |  1            |
| 3        |  2            |


The Expected Result : (scope:visible)

| id       |     title     |  
|----------|---------------|
| 1        |  File A       |
| 4        |  File D       |

Надеюсь, это прояснит

1 Ответ

0 голосов
/ 15 октября 2018

Если я правильно понимаю вашу ситуацию:

public function scopeVisible($query)
{
    return $query->whereDoesntHave('pools', function ($query) {
        $query->where('is_visible', 0);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...