无法从 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 中工作的主要内容,如果未能解决你的问题,请参考以下文章