How to manually create a new empty Eloquent Collection in Laravel 4

前端 未结 7 1808
礼貌的吻别
礼貌的吻别 2020-12-14 14:21

How do we create a new Eloquent Collection in Laravel 4, without using Query Builder?

There is a newCollection() method which can be overridden by that

相关标签:
7条回答
  • 2020-12-14 14:28

    Just to add on to the accepted answer, you can also create an alias in config/app.php

    'aliases' => array(
    
        ...
        'Collection'      => Illuminate\Database\Eloquent\Collection::class,
    

    Then you simply need to do

    $c = new Collection;
    
    0 讨论(0)
  • 2020-12-14 14:31

    In Laravel 5 and Laravel 6 you can resolve the Illuminate\Database\Eloquent\Collection class out of the service container and then add models into it.

    $eloquentCollection = resolve(Illuminate\Database\Eloquent\Collection::class);
    // or app(Illuminate\Support\Collection::class). Whatever you prefer, app() and resolve() do the same thing.
    
    $eloquentCollection->push(User::first());
    

    For more information about understanding resolving objects out of the service container in laravel take a look here: https://laravel.com/docs/5.7/container#resolving

    0 讨论(0)
  • 2020-12-14 14:35

    Laravel >= 5.5

    This may not be related to the original question, but since it's one of the first link in google search, i find this helpful for those like me, who are looking for how to create empty collection.

    If you want to manually create a new empty collection, you can use the collect helper method like this:

    $new_empty_collection = collect();
    

    You can find this helper in Illuminate\Support\helpers.php

    snippet:

    if (! function_exists('collect')) {
        /**
         * Create a collection from the given value.
         *
         * @param  mixed  $value
         * @return \Illuminate\Support\Collection
         */
        function collect($value = null)
        {
            return new Collection($value);
        }
    }
    
    0 讨论(0)
  • 2020-12-14 14:36

    As of Laravel 5. I use the global function collect()

    $collection = collect([]); // initialize an empty array [] inside to start empty collection
    

    this syntax is very clean and you can also add offsets if you don't want the numeric index, like so:

    $collection->offsetSet('foo', $foo_data); // similar to add function but with
    $collection->offsetSet('bar', $bar_data); // an assigned index
    
    0 讨论(0)
  • 2020-12-14 14:40

    It is better to use the Injection Pattern and after $this->collection->make([]) than 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([]);
    ...
    }
    
    0 讨论(0)
  • 2020-12-14 14:45

    It's not really Eloquent, to add an Eloquent model to your collection you have some options:

    In Laravel 5 you can benefit from a helper

    $c = collect(new Post);
    

    or

    $c = collect();
    $c->add(new Post);
    

    OLD Laravel 4 ANSWER

    $c = new \Illuminate\Database\Eloquent\Collection;
    

    And then you can

    $c->add(new Post);
    

    Or you could use make:

    $c = Collection::make(new Post);
    
    0 讨论(0)
提交回复
热议问题