Laravel syn c сводная таблица 3 моделей - PullRequest
0 голосов
/ 12 июля 2020

Я хочу синхронизировать c сводную таблицу из 3 моделей. Вот как я могу получать данные из моей формы.

$data = array(
position_id->   1 => ['user_id' => [5, 14]],
position_id->   2 => ['user_id' => [15]],
position_id->   3 => ['user_id' => [6]],
position_id->   4 => ['user_id' => [5]],
position_id->   6 => ['user_id' => [8, 3, 14]],
position_id->   7 => ['user_id' => [1]],
);

Вот как я sh сохраняю данные:

$order->crew()->sync($data);

Вот как база данных должна следите за сохранением данных:

Как должна выглядеть база данных

Проблема:

Как это сделать?

1 Ответ

0 голосов
/ 12 июля 2020

sync() не допускает дубликатов. Вам нужно будет использовать attach(), но сначала массив $data должен быть сопоставлен с правильным форматом ([position_id => ['user_id' => user_id]])

collect($data)
    ->map(function($users, $position_id) {
        $arr = [];
        foreach ($users['user_id'] as $user_id) {
            $arr[] = [$position_id => ['user_id' => $user_id]];
        };
        return $arr;
    })
    ->flatten(1)
    ->each(function($position) use ($order) {
        $order->crew()->attach($position);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...