【问题标题】:Laravel - Cannot Access Collection IndexesLaravel - 无法访问集合索引
【发布时间】:2017-09-06 08:11:33
【问题描述】:

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

例子:

所以我希望能够执行:

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

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

或类似的..但我得到错误

试图获取非对象的属性。

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

有人可以帮忙吗?

【问题讨论】:

  • first() 不适用于关联数组..

标签: php laravel collections


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    由于 Laravel 集合实现 ArrayAccess,您可以像访问数组一样简单地访问集合项

    $value = $collection['index1'];
    

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        【解决方案4】:

        我相信这就是您正在寻找的:

        Controller:

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

        view:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-25
          • 1970-01-01
          • 1970-01-01
          • 2019-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多