【问题标题】:Can't select specific paramter from eloquent relationship collection - works in tinker无法从 eloquent 关系集合中选择特定参数 - 在 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 并检查结果.您可能有一些用户使用空数据,如果您正在迭代集合并且有些用户有空数据,就会发生这种情况

标签: laravel eloquent laravel-blade laravel-8


【解决方案1】:

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

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

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

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

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

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

愚蠢的错误。

感谢大家的帮助。

【讨论】:

    【解决方案2】:

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

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

    public function getLastUpdateUser()
    {
        return $this->hasOne(User::class, 'created_by');
    }
    

    【讨论】:

    • 嗨 OMR - id 是外键。我实际上已经找出了问题所在 - 我很快就会发布。感谢你的帮助。始终按照您发布后立即解决的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2017-02-22
    • 2019-06-15
    • 2021-12-24
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    相关资源
    最近更新 更多