Как мы создаем новую Eloquent Collection в Laravel 4 без использования Query Builder?
Существует метод newCollection()
который может быть переопределен тем, что на самом деле не выполняет работу, потому что это используется только тогда, когда мы запрашиваем результат набора.
Я думал о том, чтобы создать пустую коллекцию, а затем заполнить ее красноречивыми объектами. Причина, по которой я не использую массив, состоит в том, что мне нравятся методы «Красноречивые коллекции», такие как contains
.
Если есть другие альтернативы, я хотел бы услышать их.
Это не очень Красноречиво, чтобы добавить в свою коллекцию модель Eloquent, у вас есть несколько вариантов:
В Laravel 5 вы можете воспользоваться помощником
$c = collect(new Post);
или
$c = collect(); $c->add(new Post);
OLD Laravel 4 ОТВЕТ
$c = new \Illuminate\Database\Eloquent\Collection;
И тогда вы можете
$c->add(new Post);
Или вы можете использовать make:
$c = Collection::make(new Post);
с laravel 5. Я использую глобальную функцию collect()
$collection = collect([]); // initialize an empty array [] inside to start empty collection
этот синтаксис очень чист, и вы также можете добавить смещения, если вам не нужен индекс числа.
$collection->offsetSet('foo', $foo_data); // similar to add function but with $collection->offsetSet('bar', $bar_data); // an assigned index
Чтобы добавить к принятому ответу, вы также можете создать псевдоним в config/app.php
'aliases' => array( ... 'Collection' => Illuminate\Database\Eloquent\Collection::class,
Тогда вам просто нужно сделать
$c = new Collection;
Я на самом деле обнаружил, что использование newCollection()
больше доказательств в будущем … например. $ collection = (новое сообщение) -> newCollection (); Таким образом, если вы решите создать свой собственный класс коллекции для своей модели (например, я сделал несколько раз) на более позднем этапе, гораздо проще реорганизовать ваш код, поскольку вы просто переопределяете newCollection()
в своей модели
Лучше использовать шаблон инжекции и после $this->collection->make([])
чем new Collection
use Illuminate\Support\Collection; ... // Inside of a clase. ... public function __construct(Collection $collection){ $this->collection = $collection; } public function getResults(){ ... $results = $this->collection->make([]); ... }