Как присвоить значение первому элементу в коллекции laravel? Что-то вроде этого $collection->put('foo', 1)
, но добавляющее ценность первому элементу.
Collection {#376
#items: array:1 [
0 => array:9 [
"id" => 83
"status" => "offline"
"created_date" => "Oct 31, 2018"
// add foo => 1 here
]
]
}
использовать этот
$data = Model::all();
$data[0]->foo = 'your data here';
@Claymore Здесь я обращаюсь к объекту модели с помощью ->
, но пользователю нужны данные первой строки, поэтому я добавил индекс [0]
, потому что данные представляют собой массив объектов коллекции, поэтому, пожалуйста, не голосуйте против, прежде чем внимательно его прочитать
$collection[0]
OP - это массив, а не объект модели. Я не голосовал против вас, потому что ваш код не удался, я сделал это, потому что ваша предпосылка не соответствует вопросу. Не каждый вариант использования Коллекций включает в себя красноречивые результаты.
Я подозреваю, что есть более чистый способ сделать это, но это лучшее, что я мог придумать на данный момент. Вы также можете использовать map
или transform
с прогоном сравнения ключевого значения, которое отправляется на их закрытие, но это в конечном итоге приведет к циклическому просмотру всех элементов массива, несмотря на то, что вы знаете конкретный из них, на который хотите нацелить.
$collection = collect([
[
'id' => 83,
'status' => 'offline',
'created_date' => 'Oct 31, 2018'
]
]);
$firstKey = $collection->keys()->first(); //This avoids the unreliable assumption that your index is necessarily numeric.
$firstElement = $collection->first();
$modifiedElement = array_merge($firstElement, ['foo1' => 1]);
$collection->put($firstKey, $modifiedElement);
Спасибо за решение. Я использовал этот подход $ item = $ collection-> first (); $ item ['foo'] = 1; вернуть сбор ([$ item]);
Model :: get () дает вам Eloquent \ Collection, дочерний объект Service \ Collections. Но каждый элемент в нем является объектом модели, а не массивом. Объекты модели имеют динамические свойства, поэтому вы можете делать то, что делаете там. Но вопрос был в сборе обычных массивов, так что это не сработает.