Получить массово вставленные идентификаторы после функции вставки () в Laravel 6+ - PullRequest
0 голосов
/ 22 апреля 2020

Я много исследовал, но не смог найти никакого решения. Поэтому я публикую это здесь. Моя проблема: после вставки групповых строк, я хочу получить все вставленные идентификаторы, чтобы сохранить идентификаторы в другой сводной таблице. Вот мой код

$create_market = [];
                $create_market_possibility = [];
                foreach ($request->type0 as $key => $value) {
                    array_push($create_market, [
                        'market_id' => $value['market_id'],
                        'event_id' => $value['event_id'],
                        'name' => $value['name'],
                        'bet_min' => $value['min_bet'],
                        'bet_max' => $value['max_bet'],
                        'commission' => $value['commission'],
                        'type' => 0,
                        'created_at' => \Carbon\Carbon::now(),
                        'updated_at' => \Carbon\Carbon::now()
                    ]);
                }
                foreach ($request->type1 as $key => $value1) {
                    array_push($create_market, [
                        'market_id' => $value1['market_id'],
                        'event_id' => $value1['event_id'],
                        'name' => $value1['name'],
                        'bet_min' => $value1['min_bet'],
                        'bet_max' => $value1['max_bet'],
                        'commission' => $value1['commission'],
                        'type' => 1,
                        'created_at' => \Carbon\Carbon::now(),
                        'updated_at' => \Carbon\Carbon::now()
                    ]);
                    foreach ($value1['possibility'] as $key => $value2) {
                        array_push($create_market_possibility, [

                            // because i am not getting the inserted ids here i cant push it here
                            // that is the problem i am facing 

                            'market_id' => $value1['market_id'],
                            'event_id' => $value1['event_id'],
                            'possibility' => $value2['possibility'],
                            'created_at' => \Carbon\Carbon::now(),
                            'updated_at' => \Carbon\Carbon::now()
                        ]);
                    }
                }
                Market::insert($create_market);
                // Here i want to retrive the last inserted all ids and put then in the obj of
                  [$create_market_possibility] array ... 

                if(count($create_market_possibility) > 0) {
                    MarketPossibility::insert($create_market_possibility);
                }
                $response = [
                    'status' => true,
                    'message' => 'Market Successfully Created'
                ];
                return response()->json($response); //@ sending response

я сделал это, когда я использовал create () для одиночной вставки $id = Market::create($array) Он возвращал мне объект .. Но в этом случае мне нужно вставить несколько строк ..
Если есть какой-либо другой способ сделать это, пожалуйста, дайте мне знать, спасибо!

1 Ответ

0 голосов
/ 22 апреля 2020

1. Для типа 0

Вы можете запустить Market :: insert ($ array) для типа 0, поскольку с MarketPossibility

2 не связано. Для type1,

Вам придется создавать каждый Рынок один за другим, а затем связывать его - вы можете использовать saveMany(), чтобы сделать его чище быстрее:

$market = Market::create([...])

$new_market_possibility = [];
foreach ($value1['possibility'] as $key => $value2) {
    $new_market_possibility[] = new App\MarketPossibility([...]);
}

$market->marketPossibilities()->saveMany($new_market_possibilities);

Все это при условии, что вы иметь стандартные отношения между Market и MarketPossibility

...