Как я могу удалить дубликаты результатов при использовании ownToMany - PullRequest
0 голосов
/ 25 января 2019

Имеются следующие таблицы:

-----------    -----------------    ---------------
| PROJECT |    | ACCESSES      |    | ENVIRONMENT |
-----------    -----------------    ---------------
| id      |    | id            |    | id          |
| title   |    | project_id    |    | title       |
-----------    | environment_id|    ---------------  
               | username      |    
               | password      |
               -----------------    

Моя цель - получить всю среду, используемую проектом, через таблицу доступа

В моей модели проекта:

public function environments(){
    return $this->belongsToMany('App\Models\Environment', "accesses");
}

Моя проблема в том, что если у меня в таблице accesses несколько строк с одинаковыми значениями project_id и environment_id, он будет несколько раз получать одну и ту же среду.

Как я могу заставить его извлекать каждую среду только один раз?

1 Ответ

0 голосов
/ 25 января 2019

Этого можно добиться с помощью метода синхронизации или метода переключения, это зависит от вашего варианта использования.

Из документов:

Отношение «многие ко многим» также предоставляет метод переключения, который «переключает» статус вложения данных идентификаторов. Если данный идентификатор в настоящее время прикреплен, он будет отсоединен. Аналогично, если он в данный момент отсоединен, он будет прикреплен:

$project->environments()->toggle([1, 2, 3]);

Вы также можете использовать метод синхронизации для построения ассоциаций «многие ко многим». Метод синхронизации принимает массив идентификаторов для размещения в промежуточной таблице. Любые идентификаторы, которых нет в данном массиве, будут удалены из промежуточной таблицы. Таким образом, после завершения этой операции в промежуточной таблице будут существовать только идентификаторы в данном массиве

$project->environments()->sync([1, 2, 3]);

Для получения дополнительной информации, пожалуйста, посмотрите в документах.

https://laravel.com/docs/5.6/eloquent-relationships#updating-many-to-many-relationships

...