@kaxa3201

Laravel как добавить в коллекцию ключ значение?

Collection {#367 ▼
  #items: array:2 [▼
    0 => CourtDecision {#369 ▶}
    1 => CourtDecision {#371 ▶}
  ]
}

Хочу в эту коллекцию добавить total
вот что хочу получить
Collection {#367 ▼
  #items: array:2 [▼
    0 => CourtDecision {#369 ▶}
    1 => CourtDecision {#371 ▶}
  ],
 #total:2
}
  • Вопрос задан
  • 906 просмотров
Пригласить эксперта
Ответы на вопрос 1
kspitfire
@kspitfire
Webdev: PHP (Symfony, Laravel), JS (Vue.js), Go.
Ну собственно вот такое сработает:

$collection->total = $collection->count();

НО Я Уверен на 99%, что вам оно не надо на самом деле. Динамическое добавление свойств - это атата и попахивает плохо.

Вам, собственно, зачем? Обязательно нужен экземпляр коллекции? Может массива хватит?

/**
 * @var Illuminate\Support\Collection $collection
 */
$arrayCollection = $collection->toArray();
$arrayCollection['total'] = $collection->count();


Если позарез нужен объект с такой структурой - унаследуйте ларавелевский класс Illuminate\Support\Collection и добавьте туда новое свойство. Это будет самый правильный способ.

use Illuminate\Support\Collection;

class MyCollection extends Collection
{
	/**
	 * @var int
	 */
    protected $total = 0;

    public function __construct($items = [])
    {
        $this->total = count($items);

        parent::__construct($items);
    }

    public function __get($key)
    {
        if ('total' === $key) {
            return $this->count();
        }

        parent::__get($key);
    }
}


Но опять же, магические методы — это тоже путь в ад.
Короче, вы хотите странного.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы