1

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

4

3 回答 3

0

您需要遍历集合以使用用户属性。如果您想在 Tinker 中执行此操作:

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

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

$customers->first()->user
于 2017-12-22T19:20:17.950 回答
0

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() 配置我们保证克隆所有项目的最小树深度。达到此深度后,只会克隆 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
于 2020-10-23T18:32:53.490 回答
0

首先你应该加载关系:

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

但我假设您这样做是因为您的输出中可以看到用户关系。

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

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

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

于 2017-12-22T19:54:02.433 回答