【问题标题】:unable to store data from $request to mysql using Laravel 5.4无法使用 Laravel 5.4 将数据从 $request 存储到 mysql
【发布时间】:2018-11-07 10:17:35
【问题描述】:

我正在传递一个带有 3 个变量的 POST 请求

Id (Randomly Generated), 
Name (Specified)
Capacity (Specified)  

来自 Angular 服务帖子。这些在 POST 的负载中,也可以在 Laravel 资源控制器方法“store()”的$request 变量中看到。

public function store(Request $request)
{
    $servers = new Server();
    return $request->getContent(); 
}

在 Chrome 的开发者工具中>network>POST 请求>在预览中我得到了这个

[{name: "bakar", capacity: 50, id: 8012}]
0: {name: "bakar", capacity: 50, id: 8012} 

但是当我使用

public function store(Request $request)
{
    $servers = new Server();
    $data = $request->getContent();
    $servers->id = $data->id;
    $servers->name = $data->name;
    $servers->capacity = $data->capacity;
    $servers->save();
}

在上述方法中,我得到一个错误异常说明:

"试图获取非对象的属性"

我该如何解决这个问题?

【问题讨论】:

  • 你能试试 dd($request) 看看里面有什么吗?
  • [{name: "bakar", capacity: 50, id: 8012}] 0: {name: "bakar", capacity: 50, id: 8012} 这在请求中!跨度>
  • 我要单独 dd($request) 吗?
  • 你可以试试$data[0]->id, $data[0]->name, $data[0]->capacity
  • 在 dd($request) 之后我得到了一个与属性相关的完整列表,当我应用 getContent() 方法时,它会向我返回请求的正文

标签: php json angular laravel


【解决方案1】:

根据您的 JSON 示例,$data 应该包含一个数组,然后在其第一个索引处包含一个对象。

因此你不能做例如$data->id 因为这是假设 $data 有一个名为 $id 的属性...它没有,第一个索引处的对象有。

所以简单地$data[0]->id 将允许您访问该索引,然后访问该索引处对象的 $id 属性。当然,如果您的请求在数组中包含多个项目,您可能需要使用循环来遍历所有项目并获取值。这取决于您的期望以及您打算用它做什么。

或者,您的 PHP 可能是正确的,而您的客户端正在以错误的格式发送数据。目前尚不清楚实际期望的结果是什么。


编辑:

由于$data 在到达您的 store() 函数时仍然是 JSON 字符串,因此您需要对其进行解码。所以先写

$data = json_decode($request->getContent());

(而不是$data = $request->getContent();)然后按照上面的方法进行。

完整示例:

public function store(Request $request)
{
    $servers = new Server();
    $data = json_decode($request->getContent());
    $servers->id = $data[0]->id;
    $servers->name = $data[0]->name;
    $servers->capacity = $data[0]->capacity;
    $servers->save();
}

【讨论】:

  • 它是正在返回的 JSON,它没有保存,使用 $data[0]->id 后给我同样的错误,
  • @Dr.Bakar 查看我对主线程的评论...如果您发现该问题,那么您需要进行更多调试,因为不清楚您的实际情况是什么数据.
  • 先生,当我返回 $request->getContent() 时,它将返回 [{name: "bakar", capacity: 50, id: 8012}] 0: {name: "bakar", capacity : 50, id: 8012} 容量: 50 id: 8012 名称: "bakar"
  • 或简单的 [(name:"bakar",capacity:50,id:8012)]
  • error=>>> 在 HandleExceptions->handleError(8, '试图获取非对象的属性', 'D:\\node\\MEAN\\laravel\\app\\Http \\Controllers\\ServerController.php', 57, array('request' => object(Request), 'servers' => object(server), 'data' => '[ { "name": "bakar", "容量": 50, "id": 8012 }]'))
猜你喜欢
  • 2020-01-19
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 2017-12-25
  • 2017-12-08
  • 1970-01-01
相关资源
最近更新 更多