在Laravel 5.6中尝试获取非对象属性时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Laravel 5.6中尝试获取非对象属性时出错相关的知识,希望对你有一定的参考价值。

所以我试图循环一个对象数组,用对象的值更新我的数据库中的某些值

当我在我的控制器中运行此循环时

foreach($statuses as $status){
            $workflow->statuses()->where('id', $status->id)->update([
                'status' =>  $status->status
            ]);
        };

它给了我错误trying to get property of non-object

当我执行`return response($ request-> status)时,这是我在控制台中看到的数据结构enter image description here

这是完整的控制器

public function workflowStatuses(Request $request, Workflow $workflow)
    {

        // validate form data
        $data = $request->validate([
            'workflow' => 'required|string',
        ]);

            // validate form data
        $oldStatuses = $request->validate([
            'statuses' => 'required|array'
        ]);

        // validate form data
        $newStatuses = $request->validate([
            'newStatuses' => 'required|array',
        ]);


        $workflow->update($data);

        $statuses = $oldStatuses;

        foreach($statuses as $status){
            $workflow->statuses()->where('id', $status['id'])->update([
                'status' =>  $status->status
            ]);
        };

        $workflow->statuses()->saveMany($newStatuses);

        return response($workflow, 200);

    }
答案

您可以将$request->validate()的返回值视为已过滤的所有请求输入的数组,仅包含要验证的数据。如果验证的数据包含数组,那么您将拥有一个多维数组。

在这里,$oldStatuses将是一个包含名为statuses的键的数组,其中包含您正在寻找的实际数组。

$oldStatuses = $request->validate([
   'statuses' => 'required|array'
]);


// $statuses should get 'statuses' out of this validated array
$statuses = $oldStatuses['statuses'];

相反,您可能想要清理它,而不是三次调用验证。通常最好在一次validate()调用中运行所有验证规则,除非您有充分的理由在逻辑上将它们分开。

$validated = $request->validate([
   'workflow' => 'required|string',
   'statuses' => 'required|array',
   'newStatuses' => 'required|array',
]);

$statuses = $validated['statuses'];
另一答案

尝试:

foreach($statuses as $status){
   $workflow->statuses()->where('id', $status['id'])->update([
   'status' =>  $status['status'] //$status['status'] should also be accessed by key 
   ]);
};

以上是关于在Laravel 5.6中尝试获取非对象属性时出错的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.6 试图获取非对象的属性

尝试使用haversine公式在laravel中获取非对象的属性

从laravel控制器返回json时尝试获取非对象的属性“id”

Laravel:试图获取非对象的属性

如何解决 laravel 数据表中的“尝试获取非对象的属性‘名称’”错误?

试图在 Laravel 4 中获取非对象的属性