【问题标题】:Cannot foreach over an array of objects in a Laravel POST无法遍历 Laravel POST 中的对象数组
【发布时间】:2019-02-10 22:39:16
【问题描述】:

我有一个从 Vue Axios 函数发布的对象数组,我希望循环并保存到数据库中。它们是问题的答案。

我已经传入$data,这是答案对象的数组(每个都有一个内容、正确和标记属性),以及它们所属问题的$id。当我返回$data, 时,它会向我显示具有所有正确属性的对象数组。当我返回$data[0] 时,我可以访问第一个对象。但是当我尝试如下 foreach 时,它抱怨 $content 不存在。在$data 上运行count() 也会出错。这里有什么问题?

Route::post('answers/{id}', function (Request $data, $id) {
    foreach ($data as $value) {
        $post[] = [
            'user_id' => 1,
            'question_id' => $id,
            'content' => $value->content,
            'correct' => $value->correct,
            'mark' => $value->mark
        ]);
    }

    Answer::save($post);
});

【问题讨论】:

  • $value 是对象还是数组?
  • $value 应该是一个对象,但如果我返回它,它就是一个空对象。

标签: php laravel eloquent


【解决方案1】:

您正在尝试遍历洞$request 对象,它是Request 类的一个实例。要访问接收到的值,首先获取它们:

// To get all the data
$data = $request->all();
// or..
// To get just a specific value
$data = $request->get('key');
// or..
// only a list of allowed elements
$data = $request->only('here', 'goes', 'your', 'keys');

因此,如果您的前端在 items 键下发送一组项目。就像上面提到的那样得到它们:

$items = $request->get('items');

然后你可以使用foreach():

$items = $request->get('items');

foreach($items as $item)
{
    // your operations
}

您可以在documentation 中阅读有关Retrieving Input 的更多信息。

【讨论】:

  • 谢谢!我现在可以在$items 上运行count(),但是当我尝试访问$item->content 时,我得到“尝试获取非对象的属性'内容'”。
  • @ChrisWickham 如果你 dd($request->all()); 看看你收到了什么会很有用。
  • 顺便说一句,当您尝试将其作为对象而不是数组处理时,可能会发生该错误。像这样再试一次:$item['content']
猜你喜欢
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
相关资源
最近更新 更多