【问题标题】:Laravel blade shows error when there is no dd(), but works with itLaravel 刀片在没有 dd() 时显示错误,但可以使用它
【发布时间】:2018-08-01 10:09:48
【问题描述】:

我有代码来检查数据透视表中是否有用户的 ID,如果有检查他是否赞成或反对(1 或 -1)
{{ $post->votes->where('id', $user->id)->first()->pivot->vote }}
但是由于某种原因,这不起作用,即使它在我死亡和转储时在控制器中工作,或者在它位于 dd() 时甚至在刀片文件中工作。编辑:错误说“试图获取非对象的属性'pivot'”。我该如何解决这个问题?

【问题讨论】:

  • 你尝试过 yo dump$post->votes->where('id', $user->id)->first() 吗?好像是空的
  • @devnullΨ 不是空的,我试过了。就像我说的,在 dd(...) 它显示 1(应该有),但是没有 dd() 就无法工作
  • 您是否通过循环对其进行迭代?添加更多代码
  • @devnullΨ 在控制器$posts = Post::with(['user', 'category', 'favorites', 'votes'])->paginate(10); 中,我将$posts 发送到posts.blade.php,在那里我迭代它们@foreach($posts as $post)
  • 转储 $posts 并检查集合的每个项目是否具有枢轴属性并且它不为空。我敢肯定其中一些是

标签: php laravel collections blade


【解决方案1】:

您的收藏中的某些项目必须为空,这就是您收到错误的原因。首先,您应该检查您是否有符合该条件的投票

if ($post->votes->where('id', $user->id)->first()) {
    // do stuff
}

然后还要检查pivot属性,例如

$post = $post->votes->where('id', $user->id)->first();
if ($post && $post->pivot) {
    echo $post->pivot->vote;
}

【讨论】:

    【解决方案2】:

    你需要先检查是否有投票,然后你可以使用pivot->vote,为了实现这一点,你可以使用optional辅助方法

    {{ optional($post->votes->where('id', $user->id)->first()->pivot)->vote }}
    

    同时确保你已经从你的控制器加载了$post 上的votes 关系

    【讨论】:

    • “试图获得非对象的属性‘投票’”。我确实加载了投票
    • 好的,扩展optional 以包含pivot 属性,然后尝试一下,我已经用一个示例更新了我的答案
    • 我试过了,现在它显示“尝试获取非对象的属性'pivot'”
    • 当您扩展 optional 以包含 pivot 时,它会抛出相同的错误吗?
    • 是的,同样的错误,但第一次,只有第一次说“投票”,第二次说“枢轴”
    猜你喜欢
    • 2018-11-11
    • 2013-02-21
    • 2020-02-14
    • 2021-05-19
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多