首页 > 解决方案 > PHP Laravel | 测试多态多对多 | 如果语句不能正常工作

问题描述

所以我没有遇到很大的问题,但我确实注意到了一些不起作用的东西,我无法解释为什么。问题出在路线之内,因为我只是在学习和处理多态关系等等。

请记住,所有数据都是播种的,并且我已通过手动插入评论并确保显示出来来验证字段中是否存在正确的数据。

这是我的 web.php 文件。

Route::get('/get/{id}/post', function($id) {
  $user = User::findOrFail($id);
  foreach($user->posts as $post) {
    echo "<hr /><h2>" . $post->title . "</h2>";
    echo "<p>By: ". $post->users->name ." | Date:" . $post->created_at->format('n-j-Y');
    echo "<br />" . $post->content . "</p><hr />";
    echo "<h3>Comments</h3>";
    if(!empty($post->comments)) {
      foreach($post->comments as $comment) {
        echo "<u>" . $comment->users->name . "</u><br />" . $comment->content . "<br /><br />";
      }
    } else {
      echo "Sorry there are no comments yet.";
    }
  }
});

我遇到的问题是在底部的 if 语句中,它实际上会在存在评论时提取所有评论和用户名。真正的问题是,当没有评论时,它不会显示 else 语句回显。

我发现这真的很奇怪,如果我只输出一个帖子,但如果我为该用户拉多个帖子,我会发现它有效。

任何想法为什么会这样做我真的很困惑。谢谢!

我让它与这样的收集方法一起工作。

if($post->comments->isNotEmpty()) {
  foreach($post->comments as $comment) {
    echo "<u>" . $comment->users->name . "</u><br />" . $comment->comment . "<br /><br />";
  }
} else {
  echo "Sorry there are no comments yet.";
}

有人知道为什么我不能使用 !empty() 函数的原因吗?

标签: laravelif-statementroutespolymorphismmany-to-many

解决方案


你试过 isEmpty() 吗?AFAIK 它应该返回 Collection 实例,所以简单的空不会削减它Laravel 5.6 collections method-isempty试试这个,看看它是否有帮助;)或你的情况isNotEmpty

有人知道为什么我不能使用 !empty() 函数的原因吗?

因为 Collection 是一个 Object 因此变量不是 的因此 Collection 对象有一个函数isEmpty() isNotEmpty()


推荐阅读