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

Arrays 尝试获取Laravel 5.6中非对象的属性时出错,arrays,laravel,eloquent,Arrays,Laravel,Eloquent,因此,我试图通过对象数组进行循环,以使用对象中的值更新数据库中的某些值 当我在控制器中运行此循环时 foreach($statuses as $status){ $workflow->statuses()->where('id', $status->id)->update([ 'status' => $status->status ]); }; public f

因此,我试图通过对象数组进行循环,以使用对象中的值更新数据库中的某些值

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

foreach($statuses as $status){
            $workflow->statuses()->where('id', $status->id)->update([
                'status' =>  $status->status
            ]);
        };
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);

    }
尝试获取非对象的属性时会出现错误

当我执行“return-response$request->status”时,这就是我在控制台中看到的数据结构

这是完整的控制器

foreach($statuses as $status){
            $workflow->statuses()->where('id', $status->id)->update([
                'status' =>  $status->status
            ]);
        };
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'];

如果调用dd$workflow->status,它会显示什么;可能每个状态都是一个数组,请尝试$status['id']而不是$status->id您不应该检查$status而不是$request->status吗?@Younel,我收到警报说未定义索引:id@Devon,我的数据来自ajax,所以也许我应该发布整个控制器以提供更好的视角。请查看整个控制器的更新。我得到这个警报json_decode期望参数1是字符串,数组给定然后你应该执行dd$状态检查你的数组结构并相应地使用键。这不是我对返回响应$请求->状态所做的吗?这似乎已经完成了!,我不知道验证中的“statuses”稍后可以称为$statuses。考虑到这一点,我将更新控制器