如何通过 Laravel 中数组中的对象保存数据

Posted

技术标签:

【中文标题】如何通过 Laravel 中数组中的对象保存数据【英文标题】:How to save data through objects which are in array in Laravel 【发布时间】:2017-05-16 07:43:57 【问题描述】:

我是 laravel 的新手。我正在通过 Postman 发送此类回复。在 Laravel 控制器中,我在 $request 中得到了这个响应。

[
    "id": 40,
    "cname": "Ramesh",
    "constraint_value": "",
    "r_id": "6",
    "rtype_id": null,
    "deleted_at": null,
    "created_at": null,
    "updated_at": null,
    "input": "111",
    "input2": "111"
, 
    "id": 45,
    "cname": "Suresh",
    "constraint_value": "",
    "r_id": "6",
    "rtype_id": null,
    "deleted_at": null,
    "created_at": null,
    "updated_at": null,
    "input": "222",
    "input2": "222"
, 
    "id": 49,
    "cname": "Raj",
    "constraint_value": "",
    "r_id": "6",
    "rtype_id": null,
    "deleted_at": null,
    "created_at": null,
    "updated_at": null,
    "input": "333",
    "input2": "333"
]

我遇到了困难

    如何计算我在 $request 中收到的数组中的对象总数。我使用过 count($request) 或 sizeOf($request) 但它只返回 1 尽管有 3 个数组。在这方面帮助我。

    如何通过这样的数组将数据保存在数据库中。我想保存input和input2的值。

【问题讨论】:

首先,您是否将这些数据以 JSON 格式发送到控制器?如果是,那么您需要先将其解码为数组......如果您使用数据变量发送数据,那么 count($request['data']) 将起作用,以便您可以从请求变量中获取。请求包含将传输到控制器方法的所有内容,因此您只需提取数据部分 请发布您如何获得 $request 变量,这是 Request 的一个实例吗?如果是,那么 $request 将不仅包含您的数据,它还将包含 Laravel 框架中所需的所有内容。这就是你得到的计数是一的原因。如果 $request 不是 Request 的实例,那么只需按照@alexey 的以下回答中提到的方式对其进行解码 是的,它的 Request 实例。什么解决方案在没有实例的情况下使用它 【参考方案1】:

可能晚了,但将来可能会对某人有所帮助。首先。您需要像这样遍历对象数组

foreach($request->all() as $key => $value)
    $model = new Model();
    $model->attribute1 = $value['attribute1'];
    $model->attribute2 = $value['attribute1'];
    $model->attributeN = $value['attributeN']; // where N is infinite # of attr
    $model->save();

所以发生的事情是,每次循环迭代时,它都会在循环内创建一个 Model 类型的新对象,并从数组键值中分配对象属性并持续存在 DB 并重复直到所有数组中的对象已完成。

$model = new Model();

是必要的,以便每次循环迭代它都会创建一个新对象并持续存在。如果您在每次N 迭代发生时不创建它,则循环可能只保存一个对象。如果您在构造函数中创建模型对象,则可能会发生这种情况,并在构造函数运行时实例化一次。

希望这会有所帮助。

【讨论】:

【参考方案2】:

我得到了解决方案。我在从 angularjs 发送数据时犯了错误。我直接发送 POST 请求而没有创建像 var data = 'data':my_request 这样的对象。这就是为什么请求在 laravel 中使用实例进行处理。但是,当我开始通过创建它的对象来发送数据时,它的工作。这是我第一个问题的解决方案。帮助我如何将接收到的数据存储在数据库中。

【讨论】:

【参考方案3】:

很简单

$request ='[ "id":40,"cname":"Ramesh","constraint_value":"","r_id":"6","rtype_id":null,"deleted_at":null,"created_at":null,"updated_at":null,"input":"111","input2":"111", "id":45,"cname":"Suresh","constraint_value":"","r_id":"6","rtype_id":null,"deleted_at":null,"created_at":null,"updated_at":null,"input":"222","input2":"222", "id":49,"cname":"Raj","constraint_value":"","r_id":"6","rtype_id":null,"deleted_at":null,"created_at":null,"updated_at":null,"input":"333","input2":"333"]';
$request = (array)json_decode($request, true);

现在像您通常使用的那样使用它们。

【讨论】:

我使用了这种方法,如果我复制粘贴你提供的代码,那么它可以工作,但如果只返回 $request = (array)json_decode($request, true); 其中 $request 是我通过邮递员发布的请求,那么它给出的输出为 [ ] 如果我使用 json_decode($request, true); 首先,(数组)不需要野兔; (对此感到抱歉)并且如果您分配了 $request = 您通过邮递员发布的内容,那么您能否证明您通过邮递员发布的请求并将输出作为 [ ] 然后我可以检查问题... 它在邮递员中为 '$request = json_decode($request, true); 提供空白页;返回 $request;'【参考方案4】:

你可以试试这个..

$data = [,]; // your response
$count = 0; 

foreach($data as $obj)

  Model::create($obj); //save the model
  $count ++;


echo $count // your count

【讨论】:

【参考方案5】:

尝试将其转换为数组:

$data = json_decode($request, true);
$count = count($data); // Count number of elements.
Model::insert($data); // Insert all elements into DB.

不要忘记首先验证任何输入并将除时间戳之外的所有字段添加到$fillable 数组。

【讨论】:

当我返回$count = count($data)时,它返回0。如果我返回$data = json_decode($request, true);它在邮递员中返回空白页。 能否请您提及您如何获得 $request 或 $request 是什么。它必须是数组,里面必须有你的 JSON 数据 请发布dd($request);的结果。 #json: ParameterBag #32 #parameters: array:3 [ 0 => array:10 [ "id" => 40 "cname" => "Ramesh" "constraint_value" => "" "r_id" => "6" "rtype_id" => null "deleted_at" => null "created_at" => null "updated_at" => null "input" => "111" "input2" => "111" ] 和同样其他 2 个对象] #convertedFiles: null #userResolver: Closure #119 class: "Illuminate\Auth\AuthServiceProvider" 和所有 laravel 框架数据...

以上是关于如何通过 Laravel 中数组中的对象保存数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组数据保存到 Laravel postgres 中?

Laravel:一次保存多个模型/ json嵌套输入

PHP如何使用laravel 5将数据从数组保存到mysql

如何通过laravel中的控制器将数据保存在数据库中

Laravel - 从 JSON 数组创建对象以将其保存在 SQL 数据库中

Laravel - 使用对象数组更新并将记录保存到数据库