【问题标题】:Laravel - Can't pass data through viewLaravel - 无法通过视图传递数据
【发布时间】:2023-12-21 12:23:01
【问题描述】:

我尝试将数据从控制器发送到 Laravel 5.4 上的视图。

我的控制器“PagesController.php”:

public function bird($id) {

    $infoBirdById = new InfoBird();
    $birdById = $infoBirdById->getBirdById($id);

    $infoHealthById = new InfoHealth();
    $healthById = $infoHealthById->getHealthById($id);

    $infoTransportByIdBird = new InfoTransport();
    $transportByIdBird = $infoTransportByIdBird->getTransportByIdBird($id);

    $infoUserByIdHealer = new InfoUser();
    $userByIdHealer = $infoUserByIdHealer->getUserByIdHealer($id);

    var_dump($userByIdHealer);
    //var_dump($birdById);
    //var_dump($healthById);
    //var_dump($transportByIdBird);

    return view('pages.bird', compact('birdById', 'healthById', 'userByIdHealer', 'transportByIdBird'));
}

视图“bird.blade.php”的摘录:

<div class="block block-name">
    <h2>{{ $userByIdHealer->prenom }} {{ $userByIdHealer->nom }}</h2>
</div>

这是错误:此集合实例上不存在属性 [prenom]。

userByIdhealer 的转储结果:

object(Illuminate\Support\Collection)[216]
  protected 'items' => 
    array (size=1)
      0 => 
        object(stdClass)[223]
          public 'id_biodiv_acteur' => int 3
          public 'nom' => string 'Rinaire' (length=7)
          public 'prenom' => string 'Vété' (length=6)
          public 'civilite' => string 'Homme' (length=5)
          public 'date_naissance' => string '2017-05-10' (length=10)
          ect...

所以我不明白为什么会出现这个错误,因为在转储中我可以看到“prenom”在这里......

感谢您的帮助!

【问题讨论】:

  • 显示你的 getUserByIdHealer($id);方法
  • prenom 不是Collection 上的函数或属性。因为$userByIdHealerCollection,你需要循环它,或者使用-&gt;first()来获取第一个实例,那么你应该可以使用-&gt;prenom来访问那个属性。
  • @Tim Lewis 明白了!如果您在一个集合中找到许多项目,只需使用 -&gt;get() 而不是 -&gt;first()
  • 正确,如果使用的closure-&gt;get(),则QueryBuilder 实例将返回Collection,如果与-&gt;first() 一起使用,则返回Model(通常)。此外,Collection 还具有函数 -&gt;first() 以返回单个 Model。否则,将Collection 视为具有附加功能的数组。

标签: php database laravel blade


【解决方案1】:
{{ $userByIdHealer[0]->prenom }} {{ $userByIdHealer[0]->nom }}

您将它放在 0 数组中,因此请使用它,或者您可以使用 foreach 循环并在没有 0 的情况下使用

【讨论】:

  • 请注意,如果未设置$userByIdHealer[0],这将抛出trying to property of non-object;在尝试访问之前,应始终与isset(...) 核对。