【问题标题】:View nested objects under Tinker查看 Tinker 下的嵌套对象
【发布时间】:2018-06-05 09:27:03
【问题描述】:

当我运行这个时在 Laravel Tinker 上:

>>> $customers = App\Customer::all();

我得到一个对象列表,例如:

=> Illuminate\Database\Eloquent\Collection {#811
 all: [
   App\Customer {#815
     id: 3,
     favorite: 6,
     user: App\User {#232 ...11},
     zip: 11221
  }
  ...
]

我的问题是如何将user 的值扩展到它具有{#232 ...11} 的位置?

【问题讨论】:

    标签: laravel laravel-5 eloquent tinker


    【解决方案1】:

    您需要遍历集合以使用用户属性。如果你想在 Tinker 中这样做:

    foreach ($customers as $customer) {
        echo $customer->user->name;
    }
    

    如果你只是想看数据结构,你可以在 Tinker 中这样做:

    $customers->first()->user
    

    【讨论】:

    • 我的问题是如何将用户价值扩展到它有 {#232 ...11} 的地方?上面的代码是为了简化它,但我的关系返回了 1000 行,为了调试,我想知道是否有一些命令允许我访问 `{#232 ...11} id
    【解决方案2】:

    首先你应该加载关系:

    $customers = App\Customer::with('user')->get();
    

    但我认为您这样做是因为您的输出中显示了用户关系。

    要获得客户的数组表示以及您应该使用的关系:

    foreach ($customers as $customer)
    {
       dump($customer->toArray());
    }
    

    显然结果与您转储整个集合不同,但您将获得所有模型属性以及关系,我认为这就是您想要的。

    【讨论】:

    • 我的问题是如何将用户价值扩展到它有 {#232 ...11} 的地方?上面的代码是为了简化它,但我的关系返回了 1000 行,为了调试,我想知道是否有一些命令允许我访问 `{#232 ...11} id
    • @Kal 是的,我明白了,但我正在尝试做其他事情,但没有其他事情适合我
    【解决方案3】:

    artisan 的修补功能几乎完全基于 psysh

    见:https://github.com/bobthecow/psysh/

    还有:https://psysh.org/

    在 psysh 内部是一个名为 dump 的命令,dump 是 symfony 的 var-dumper 的一种实现,是一种较新的 var_dump。

    dump -h
    

    显示:

    用法:转储[--depth DEPTH] [-a|--all] [--]

    参数:target 要转储的目标对象或原语。

    选项:--depth 解析深度。 (默认: 10) --all (-a) 包括
    私有和受保护的方法和属性。

    帮助:转储一个对象或原语。这就像 var_dump 但方式
    更棒的。例如

    >>>转储$_
    >>> 转储 $someVar
    >>> 转储 $stuff->getAll()

    对于我自己来说,使用参数 --depth 并不满足我的对象,它也相当大。所以我们看到 psysh 依赖于 symfony 的 var-dumper。

    见:https://github.com/symfony/var-dumper

    还有:https://symfony.com/doc/current/components/var_dumper.html

    高级部分说明

    dump() 函数只是一个简单的包装器和更方便的方法 调用 VarDumper::dump()。您可以更改此行为 通过调用 VarDumper::setHandler($callable) 函数。调用 dump() 然后将被转发到 $callable。

    通过添加处理程序,您可以自定义克隆器、转储器和 脚轮...

    克隆器用于创建任何 PHP 的中间表示 多变的。它的输出是 Symfony\Component\VarDumper\Cloner\Data 包装此表示的对象...

    克隆器在创建表示时会应用限制,因此 只能表示克隆变量的子集。打电话之前 cloneVar(),你可以配置这些限制:

    setMaxItems() 配置将被克隆的项目的最大数量超过最小嵌套深度。使用广度优先计算项目 算法使得较低级别的项目具有比深度更高的优先级 嵌套项目。指定 -1 会删除限制。 setMinDepth() 配置我们保证克隆所有项目的最小树深度。达到此深度后,仅设置 MaxItems 个项 将被克隆。默认值为1,与older一致 Symfony 版本。设置最大字符串() 配置在剪切过长字符串之前将克隆的最大字符数。指定 -1 会移除限制。

    见:https://symfony.com/doc/current/components/var_dumper/advanced.html

    所以我正在做的是在名为 VarDumpFull 的应用程序中创建一个文件夹,然后将以下代码添加到文件 /app/VarDumpFull/VarDumpFull.php 中

    <?php
    
    namespace App\VarDumpFull;
    
    use Symfony\Component\VarDumper\Cloner\VarCloner;
    use Symfony\Component\VarDumper\Dumper\CliDumper;
    
    class VarDumpFull
    {
            public function __construct($var)
            {
                    $cloner = new VarCloner();
                    $dumper = new CliDumper();
                    $cloner->setMaxItems(-1);
                    $cloner->setMaxString(-1);
                    $dumper->dump($cloner->cloneVar($var));
            }
    }
    

    你可以像这样轻松地运行它:

    new VarDumpFull($variable_to_be_dumped);
    

    记得跑来更新你的课程。

    composer dump-autoload
    

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 2020-12-30
      • 2022-01-15
      • 1970-01-01
      • 2021-10-01
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多