如何通过 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 中?
PHP如何使用laravel 5将数据从数组保存到mysql