无法通过`echo`访问Blade中的归属于关系,但是可以通过`dd`访问

时间:2019-05-11 09:02:29

标签: laravel laravel-5.8

我的情况非常混乱。我在Blade模板中的代码是这样的:

@foreach ($upcoming as $match)
    <?php
        dd($match->team1);
        echo $match->team1->flag_image;
    ?>
// --- snip

<?php标签仅用于调试,不属于实际代码)

如果运行此代码,则第一行中的dd会触发,并且按预期方式获得转储:

enter image description here

但是当我注释掉时,下一行无法找到team1对象:

<?php
    //dd($match->team1);
    echo $match->team1->flag_image;
?>

结果是:

Trying to get property 'flag_image' of non-object

据我所知,这些关系定义正确。如果不是,那么第一个dd就不会起作用。

我真的无话可说,简单的echo无法加载关系。有人遇到类似的东西吗?

2 个答案:

答案 0 :(得分:0)

您的$ match可能没有关系team1。因此,关系数据(即flag_image)不会退出。

  1. 首先,检查您的数据库并确保拥有所有相关数据。
  2. 第二,这种情况很正常,即找不到关联数据,因此刀刃返回错误(尝试获取非对象的属性“ flag_image”)。

您可以检查关系是否存在,然后尝试访问该属性。 如果您这样:

if($match->team1)
{
  echo ($match->team1->flag_image);
}

刀片中的OR

 {{$match->team1?$match->team1->flag_image:'N/A'}}

答案 1 :(得分:0)

因此,我终于设法找到了它。我在这里发布消息是为了帮助别人,尽管这只是调试的一种情况。

在我的情况下,比赛的集合(称为upcoming)并没有全部分配适当的球队。例如,对于半决赛和决赛,球队尚未宣布(尽管场地已经宣布),所以在我的情况下,team1_idteam2_id为空。

很难发现该错误,因为执行dd仅会检查第一场比赛,对于该比赛,队ID不为空。只有当处理循环达到了最后一场比赛时,团队才空白,并且关系开始抛出错误。