Laravel - 无法访问集合索引

时间:2017-09-06 08:11:33

标签: php laravel collections

当然,这对我来说是一个理解问题。我只是想创建一个可以输出元素的集合。

示例:

所以我希望能够执行:

$collection=collect([
    'index1' => 'data1',
    'index2' => 'data2',
    'index3' => 'data3',
]);

$row=$collection->first();
dd($row->index1);

或类似..但我收到错误

  

尝试获取非对象的属性。

这是关于Laravel系列的理解问题,我已经阅读了从基本用法到API参考的Laravel文档。我找不到有关如何生成此基本静态集合的信息。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

$row=$collection->first();指向值data1,而不是对象/数组。

要获得预期的行为,请尝试下面的代码,它将每个代码包装在各个数组中。

$collection=collect([
                             ['index1' => 'data1'],
                             ['index2' => 'data2'],
                             ['index3' => 'data3'],
                            ]);

$row=$collection->first();
dd($row->index1);

答案 1 :(得分:0)

当Laravel集合实现ArrayAccess时,您可以像使用数组一样访问集合项

$value = $collection['index1'];

或者您可以对集合使用get方法

$value = $collection->get('index1');

答案 2 :(得分:0)

感谢您的回答,我看到$ collection ['index1'];格式有效。

这不是我想要的,让我解释一下原因。我知道可能有更好的方法,但为了这个特殊的编码要求,我想知道答案。

我正在构建一个CRUD刀片表单。

在我的刀片上,我将'field1'的初始输出为$ dbcollection-> field1

现在当然如果数据库返回null(需要创建),则此输出将失败。所以我在这里尝试做的是传递刀片一个它理解的NULL填充集合,所以至少它不会抱怨对象的非实例并避免刀片表单上的@if语句来解释编码格式的差异。

答案 3 :(得分:0)

我相信这就是你要找的东西:

Controller

$collection=collect([
    'index1' => 'data1',
    'index2' => 'data2',
    'index3' => 'data3',
]);
$row = $collection->first();

view

<input type="text" value="{{ ($row->index1 ? $row->index1 : '') }}" >
.
.
.
.