У меня есть 2 таблицы и третья сводная таблица следующим образом:
Таблица 1: Файлы
Таблица 2: Пулы
- id
- title
- is_visible (1,0)
Таблица 3: file_pools
Все модели и отношения на месте.
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 |
Надеюсь, это прояснит