首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查看Tinker下的嵌套对象

查看Tinker下的嵌套对象
EN

Stack Overflow用户
提问于 2017-12-23 03:18:51
回答 3查看 2.1K关注 0票数 1

在Laravel Tinker上运行以下命令:

代码语言:javascript
复制
>>> $customers = App\Customer::all();

我得到一个对象列表,如下所示:

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

我的问题是如何在包含{#232 ...11}的位置扩展user

EN

回答 3

Stack Overflow用户

发布于 2017-12-23 03:20:18

您需要遍历集合才能使用用户属性。如果你想在Tinker中做到这一点:

代码语言:javascript
复制
foreach ($customers as $customer) {
    echo $customer->user->name;
}

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

代码语言:javascript
复制
$customers->first()->user
票数 0
EN

Stack Overflow用户

发布于 2017-12-23 03:54:02

首先,你应该加载关系:

代码语言:javascript
复制
$customers = App\Customer::with('user')->get();

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

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

代码语言:javascript
复制
foreach ($customers as $customer)
{
   dump($customer->toArray());
}

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

票数 0
EN

Stack Overflow用户

发布于 2020-10-24 02:32:53

工匠的修补工功能几乎完全基于心理。

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

还有:https://psysh.org/

在var_dump内部是一个叫做转储的命令,转储是symfony的var- dump的一个实现,是一种更新的转储。

代码语言:javascript
复制
dump -h

显示:

用法:转储--深度--

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

选项:--解析的深度。(默认值: 10) --所有(-a)包括

私有和受保护的方法和属性。

帮助:转储对象或基元。这就像var_dump,但是方式

太棒了。e.g.

dump $_

转储$someVar

转储$stuff->getAll()

对于我自己来说,运行参数--深度并不能满足我的对象,它也相当大。因此,我们可以看到dumper依赖于symfony的var-dumper。

请参阅:https://github.com/symfony/var-dumper

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

高级部分说明

()函数只是一个很薄的包装器,是调用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

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

代码语言:javascript
复制
<?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));
        }
}

您可以像这样轻松地运行:

代码语言:javascript
复制
new VarDumpFull($variable_to_be_dumped);

记得运行来更新你的类。

代码语言:javascript
复制
composer dump-autoload
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47946356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档