Как создать новую пустую Eloquent Collection в Laravel 4

Как мы создаем новую Eloquent Collection в Laravel 4 без использования Query Builder?

Существует метод newCollection() который может быть переопределен тем, что на самом деле не выполняет работу, потому что это используется только тогда, когда мы запрашиваем результат набора.

Я думал о том, чтобы создать пустую коллекцию, а затем заполнить ее красноречивыми объектами. Причина, по которой я не использую массив, состоит в том, что мне нравятся методы «Красноречивые коллекции», такие как contains .

Если есть другие альтернативы, я хотел бы услышать их.

Solutions Collecting From Web of "Как создать новую пустую Eloquent Collection в Laravel 4"

Это не очень Красноречиво, чтобы добавить в свою коллекцию модель 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([]); ... }