【问题标题】:Laravel Collection query resultsLaravel 集合查询结果
【发布时间】:2019-02-05 05:16:58
【问题描述】:

在自定义工匠命令中,我尝试使用 User::all() 访问模型的所有成员(例如用户)。

数据库中存在此模型的记录,但命令中的 User::all() 仅返回 "Illuminate\Database\Eloquent\Collection {#3308}" 而不是实际结果。 Dumper 不显示集合内的任何项目,只显示集合有多少项目

这似乎只发生在命令中,因为我可以使用 Tinker 提取结果。

有人知道为什么会这样吗?

【问题讨论】:

  • Laravel 5 的小版本是什么? 5.6?
  • Foreach on collection 没有给出结果?
  • @cherrysoft 版本是5.6.35
  • @DavidAuvray 不,它似乎只是返回 Collection 类而不是该模型/查询的实际结果

标签: php laravel laravel-5 eloquent


【解决方案1】:

Laravel 使用 Symfony 的 VarCloner 类,在这个类中有 $maxItems 属性,默认定义为 2500。 ($maxItems 来自父类)

如果您想获得更多项目,您可以覆盖或扩展 Illuminate/Support/Debug/Dumper.php

这是默认设置

public function dump($value)
    {
        if (class_exists(CliDumper::class)) {
            $dumper = 'cli' === PHP_SAPI ? new CliDumper : new HtmlDumper;
            $dumper->dump((new VarCloner)->cloneVar($value));
        } else {
            var_dump($value);
        }
    }

但你可以说你想转储更多的物品;

public function dump($value)
{
    if (class_exists(CliDumper::class)) {
        $dumper = 'cli' === PHP_SAPI ? new CliDumper : new HtmlDumper;
        $cloner = new VarCloner;
        $cloner->setMaxItems(4000);
        $dumper->dump($cloner->cloneVar($value));
    } else {
        var_dump($value);
    }
}

【讨论】:

  • 您好,哈桑,感谢您的回答。不幸的是,这些模型中只有 3 个被创建,所以它不应该达到这个上限。例如 ::all() 方法在正常的 Tinker 会话中工作正常并返回这三个实例。但是,在 artisan 命令内部运行时,它只返回 Collection 类而不是实际数据。
  • @A.Rahm Ops,我认为这是关于超出项目限制。问题不清楚,你更新了我的编辑所以..
  • @A.Rahm 你能检查 laravel.log 文件吗?有错误日志吗?
  • 没有与此相关的错误。我做了更多的挖掘,我能够使用数组语法访问集合的成员,现在主要问题似乎只是在 shell 内部打印出来。无论如何,这更方便。感谢您的帮助!
猜你喜欢
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 2018-03-04
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 2016-08-19
相关资源
最近更新 更多