无法使用Laravel 5.4将数据从$ request存储到mysql

时间:2018-11-07 10:17:36

标签: php json angular laravel

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

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

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

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

在Chrome的开发人员工具中>网络> 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();
}

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

  

“试图获取非对象的属性”

我该如何解决?

1 个答案:

答案 0 :(得分:0)

根据您的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();
}