2017-09-06 45 views
0

肯定這是我的一個理解問題。我只是想創建一個可以輸出元素的集合。Laravel - 無法訪問收集索引

例子:

所以我希望能夠執行:

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

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

或者類似的。但我得到的錯誤

試圖獲得一個非對象的屬性。

這是一個關於Laravel集合的理解問題,我讀過從基本用法到API參考的Laravel文檔。我無法找到關於如何製作這個基本靜態集合的信息。

有人可以幫忙嗎?

+0

'第()'不通過關聯數組工作.. – Demonyowh

回答

1

$row=$collection->first();指向值data1,而不是對象/數組。

爲了獲得預期的行爲,請嘗試下面的代碼,它將每個代碼包裝在單獨的數組中。

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

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

由於Laravel集合實現ArrayAccess你可以簡單地訪問集合項目,如您有一個數組

$value = $collection['index1']; 

,或者你可以使用在集合上get方法做

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

謝謝您答案,我看到$ collection ['index1'];格式的作品。

這不完全是我想要的,讓我解釋一下爲什麼。我知道這可能有更好的方法,但爲了這個特定的編碼要求,我想知道這個答案。

我正在構建一個CRUD刀片表單。

在我的刀片如果數據庫返回一個空(創建必需)此輸出將失敗我有「字段1」,目標當然$ dbcollection->字段1

現在初始輸出。所以我在這裏要做的是通過刀片一個NULL填充它理解的集合,所以至少它不會抱怨對象的非實例並且避免刀片表單上的@if語句來解決編碼格式的差異。

0

我相信這是你在找什麼:

Controller

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

view

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