Php 如何在Laravel 4中手动创建新的空雄辩集合

Php 如何在Laravel 4中手动创建新的空雄辩集合,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,如何在不使用查询生成器的情况下,在Laravel4中创建一个新的雄辩的集合 有一个newCollection()方法,它可以被不真正起作用的方法覆盖,因为它只在查询集合结果时使用 我在考虑建立一个空的集合,然后用有说服力的对象填充它。我不使用数组的原因是因为我喜欢雄辩的集合方法,比如contains 如果还有其他选择,我很想听听他们的意见。这不是很有说服力,要在你的收藏中添加一个有说服力的模型,你有一些选择: 在Laravel 5中,您可以从助手处受益 $c = collect(new Post

如何在不使用查询生成器的情况下,在Laravel4中创建一个新的雄辩的集合

有一个
newCollection()
方法,它可以被不真正起作用的方法覆盖,因为它只在查询集合结果时使用

我在考虑建立一个空的集合,然后用有说服力的对象填充它。我不使用数组的原因是因为我喜欢雄辩的集合方法,比如
contains


如果还有其他选择,我很想听听他们的意见。

这不是很有说服力,要在你的收藏中添加一个有说服力的模型,你有一些选择:

在Laravel 5中,您可以从助手处受益

$c = collect(new Post);

老拉威尔4号答案

$c = new \Illuminate\Database\Eloquent\Collection;
然后你就可以

$c->add(new Post);
或者您可以使用make:

$c = Collection::make(new Post);

为了添加到已接受的答案中,您还可以在
config/app.php

'aliases' => array(

    ...
    'Collection'      => Illuminate\Database\Eloquent\Collection::class,
那么你只需要做

$c = new Collection;

$this->collection->make([])
之后使用注入模式比
新集合

use Illuminate\Support\Collection;
...
// Inside of a clase.
...
public function __construct(Collection $collection){
    $this->collection = $collection;
}

public function getResults(){
...
$results = $this->collection->make([]);
...
}

事实上,我发现使用
newCollection()
更能证明未来

例如:

$collection = (new Post)->newCollection();

这样,如果您决定在以后的阶段为您的模型创建自己的集合类(就像我已经多次做过的那样),重构代码就容易多了,因为您只需覆盖从Laravel 5开始的模型中的
newCollection()
函数。我使用全局函数
collect()

此语法非常简洁,如果不需要数字索引,也可以添加偏移量,如下所示:

$collection->offsetSet('foo', $foo_data); // similar to add function but with
$collection->offsetSet('bar', $bar_data); // an assigned index
拉威尔>=5.5 这可能与最初的问题无关,但由于这是谷歌搜索的第一个链接之一,我发现这对像我这样正在寻找如何创建空集合的人很有帮助

如果要手动创建新的空集合,可以使用
集合
助手方法,如下所示:

$new_empty_collection = collect();

您可以在
illumb\Support\helpers.php

'aliases' => array(

    ...
    'Collection'      => Illuminate\Database\Eloquent\Collection::class,
片段:

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);
    }
}

在Laravel 5和Laravel 6中,您可以从服务容器中解析
illumb\Database\Eloquent\Collection
类,然后向其中添加模型

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

$eloquentCollection->push(User::first());
有关了解从laravel中的服务容器中解析对象的更多信息,请查看以下内容:

我用这种方式:

$coll = new Collection();
    
$coll->name = 'name';
$coll->value = 'value';
$coll->description = 'description';
并将其作为常规集合使用


dd($coll->name)

几乎可以工作了!我认为
\illumb\Support\Collection
\illumb\Database\elount\Collection
的一个更通用的版本。所以我想,这毕竟是雄辩的一部分。希望这对其他人有帮助。是的,我应该看看它,因为我缺少add方法,它只出现在Eloquent\Collection中。已编辑。@JofryHS如果使用
\illumb\Support\Collection
,您可以使用
$c->push(新帖子)
而不是add方法。我更喜欢使用静态方法:
$c=\Illumb\Database\Eloquent\Collection::make()。这确保了正确的工厂实例化
如果这句话仍然有效,您能解释一下原因吗?为了记录在案,在您发布此答案前2年,
collect()
helper已被编辑到接受答案中。是否可以创建一个类型为
illights\Database\Eloquent\collection
的空集合?这应该是100%接受的答案。其他答案是支持集合,而不是雄辩的集合!
$coll = new Collection();
    
$coll->name = 'name';
$coll->value = 'value';
$coll->description = 'description';