【问题标题】:Retrive Bulk Inserted ids after insert() function in Laravel 6+在 Laravel 6+ 中的 insert() 函数之后检索批量插入的 id
【发布时间】:2020-04-22 11:00:14
【问题描述】:

我研究了很多,但找不到任何解决方案。所以我把它贴在这里 我的问题是在插入批量行后,我想获取所有插入的 ID 以将 ID 保存到另一个数据透视表。这是我的代码

$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) 它返回了我的对象.. 但在这种情况下,我必须插入多行..
如果有其他方法请告诉我,谢谢!

【问题讨论】:

  • 你试过$create_market_possibility = Market::insert($create_market)
  • 您是说将对象保存在 create_market_possibility 数组中??...我试过这个,但它返回了我 1

标签: php mysql laravel laravel-6 laravel-6.2


【解决方案1】:

1。对于 type0

您可以为 type0 运行 Market::insert($array),因为没有关联的 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 之间建立了标准关系

【讨论】:

  • ` $market = Market::create([...]) ` 将适用于多个插入?因为市场也在插入多个
  • 仅针对单个市场,因为您必须针对每个市场运行关联
  • 由于请求数据是一个数组.. 然后我必须在我不寻找的循环下运行查询
  • 好吧,我不确定您是否可以在单个命令中实现您想要的,因为您将无法从您的市场中获取 id
  • 这就是问题所在.. 有没有办法在 insert() 方法之后获取 ids
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 2011-03-16
  • 2018-02-12
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多