查看Tinker

时间:2017-12-22 19:18:51

标签: laravel laravel-5 eloquent tinker

当我运行时,在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}

3 个答案:

答案 0 :(得分:0)

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

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

如果您只想查看数据结构,可以在Tinker中执行此操作:

$customers->first()->user

答案 1 :(得分:0)

首先你应该加载关系:

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

但我认为你这样做是因为你的输出上有可见的用户关系。

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

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

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

答案 2 :(得分:0)

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

请参阅:https://github.com/bobthecow/psysh/

还:https://psysh.org/

psysh内部是一个称为dump的命令,dump是交响乐的var-dumper的一种实现,是一种较新的var_dump。

dump -h

显示:

用法:dump [--depth DEPTH] [-a | --all] [-]

参数:目标要转储的目标对象或基元。

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

帮助:转储对象或基元。就像var_dump一样,但是
真棒。例如

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

对于使用参数--depth的我自己来说,深度不能满足我的目标,该目标也很大。因此我们看到psysh依赖于交响乐的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() 配置最小树深度,我们可以在其中保证克隆所有项目。达到此深度后,仅setMaxItems项 将被克隆。默认值为1,与较早版本一致 Symfony版本。 setMaxString() 配置在剪切超长字符串之前将克隆的最大字符数。指定-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