【问题标题】:How to insert multiple row (array of objects) without using loop in Laravel?如何在 Laravel 中不使用循环插入多行(对象数组)?
【发布时间】:2020-08-10 01:02:21
【问题描述】:

我使用 Angular 作为前端,在 laravel 中发送到 post 的参数是对象数组。我想在不使用循环的情况下插入大量元素。有可能吗??如果是,我该如何实现??

Php 中的 RoomAvailability 控制器

public function storeRoomAvailability()
{
    $roomId = request();
    $test = RoomAvailability::where('room_id', $roomId->room_id)->get();
    if (is_null($test)) {

        return response()->json([
            'success' => false,
            'message' => 'The room is already taken'
        ]);
    } else {

        $roomAvailability = RoomAvailability::create([$this->validateRequest()]);

        return response()->json([
            'success' => true,
            'message' => 'Room Availability has been created successfully.',
            'data' => $roomAvailability
        ]);
    }
}

private function validateRequest()
{
    return request()->validate([
        'room_id' => 'required |unique:room_availabilities',
        'reservation_id' => 'nullable',
        'booking_id' => 'required',
        'check_in_date' => 'required',
        'check_out_date' => 'required'
    ]);
}

Angular 8 的参数

[
  {
    "reservation_id": 25,
    "room_id": 1,
    "check_in_date": "2020-04-27 12:00:00",
    "check_out_date": "2020-04-30 12:00:00",
    "availability": false,
    "status": "booked",
    "booking_id": 26
   },
  {
    "reservation_id": 26,
    "room_id": 2,
    "check_in_date": "2020-04-27 12:00:00",
    "check_out_date": "2020-04-30 12:00:00",
    "availability": false,
    "status": "booked",
    "booking_id": 26
   }
]

【问题讨论】:

  • 您的代码当前是否有效?我不明白$roomId = request();。你的代码有效吗?
  • 您可以使用insert () 方法一次执行数组的批量插入,如果您的数组处于完美状态,那么是的,您可以在没有循环的情况下插入它(我不建议这样做一些验证等)
  • @ChristopheHubert 是的,代码运行良好
  • 谢谢@AnujShrestha.. 我会努力的
  • 你使用insert()了吗?您还需要更改验证以使用数组????

标签: php arrays laravel eloquent


【解决方案1】:

首先将来自角度的参数转换为关联数组

$arrayValues=json_decode($Parameters_from_Angular,true);

然后,使用批量插入插入新值:

RoomAvailability::insert($arrayValues);

【讨论】:

  • 我尝试使用 json_decode 但它抛出异常说“json_decode() 期望参数 1 是字符串,给定数组”。我尝试使用来自角度的 JSON.stringy 将上述数组转换为 json 数组。但它仍然显示相同的错误??
  • 你应该把你的json放在引号之间的一行中,复制并过去然后尝试: $json= '[{"reservation_id": 25, "room_id": 1, "check_in_date": "2020 -04-27 12:00:00”,“check_out_date”:“2020-04-30 12:00:00”,“可用性”:false,“状态”:“已预订”,“booking_id”:26},{ “reservation_id”:26,“room_id”:2,“check_in_date”:“2020-04-27 12:00:00”,“check_out_date”:“2020-04-30 12:00:00”,“可用性”:假,“状态”:“预订”,“预订ID”:26}]'; $value=json_decode($json);
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 2021-01-29
  • 2016-01-22
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 2012-01-24
相关资源
最近更新 更多