无法从 eloquent 关系集合中选择特定参数 - 在 tinker 中工作

Posted

技术标签:

【中文标题】无法从 eloquent 关系集合中选择特定参数 - 在 tinker 中工作【英文标题】:Can't select specific paramter from eloquent relationship collection - works in tinker 【发布时间】:2021-05-19 14:27:20 【问题描述】:

我正在尝试让最新的用户更新文档。

我在文档模型中设置了数据库和关系如下:

public function getLastUpdateUser()

    return $this->hasOne(User::class, 'id', 'created_by');

这个功能正在修补程序中工作。

我正在将文档数据传递给一个组件并显示如下:

<div class="text-sm text-gray-500">
     $doc->getLastUpdateUser
</div>

这显示了上次更新文档的用户的所有数据。然而问题是我不能从这个集合中选择一个特定的参数。这段代码:

<div class="text-sm text-gray-500">
     $doc->getLastUpdateUser->name
</div>

产生以下错误:

Attempt to read property "name" on null

尽管如果我删除 -> 名称,我可以看到包括“名称”在内的所有数据。

希望我真的很密集,但我一直在努力弄清楚为什么这会导致几个小时的问题。它在修补程序中完美运行。我与其他模型的关系也完全相同,它们都在同一个组件中工作。

任何帮助将不胜感激。

【问题讨论】:

尝试 $doc->getLastUpdateUser()->first()->name 您的 getLastUpdateUser 为空。该关系未从数据库中获取任何用户。查看 $doc->getLastUpdateUser 的结果 @OMR Weird - 'Call to undefined method App\Models\Privilege::getLastUpdateUser()' -> 为什么要搜索我没有引用的模型? @RajeshPaudel 正如我所说 - 我没有得到空值 - getLastUpdateUser 给了我所有的用户数据,但 getLastUpdateUser->name 结果为空 而不是 $doc->getLastUpdateUser->name 使用 @if(is_null($doc->getLastUpdateUser)) dd($doc) @endif 并检查结果.您可能有一些用户使用空数据,如果您正在迭代集合并且有些用户有空数据,就会发生这种情况 【参考方案1】:

对于将来登陆此帖子的任何人。

这个问题是html抽象的产物。

我已将一个表格抽象为一个组件,我在相关页面上多次调用该组件。

然后,我为这些表格提供了它们的特定数据集,并开始着手制作第一个表格。

不幸的是,这个错误是由我尚未开始处理的表产生的,该表提供了一个数据集,该数据集的模型没有 getLatestUserUpdate 模型。

每次抛出错误时,我都认为这是我正在积极处理的代码的问题。

愚蠢的错误。

感谢大家的帮助。

【讨论】:

【参考方案2】:

我认为问题出在您的关系定义中:

hasOne关系中的第二个参数应该是外键,关系应该是:

public function getLastUpdateUser()

    return $this->hasOne(User::class, 'created_by');

【讨论】:

嗨 OMR - id 是外键。我实际上已经找出了问题所在 - 我很快就会发布。感谢你的帮助。始终按照您发布后立即解决的方式。

以上是关于无法从 eloquent 关系集合中选择特定参数 - 在 tinker 中工作的主要内容,如果未能解决你的问题,请参考以下文章

在 Eloquent 急切加载中选择特定字段不起作用

无法从 Eloquent 集合中访问所需的属性

Laravel Eloquent 从关系中选择

无法从 Laravel Eloquent 关系中获取数据

如何合并两个 Eloquent 集合?

如何从 laravel 的 eloquent 集合中获取外键