PHP Laravel |多态测试多态|如果语句不能正常工作

时间:2018-07-30 17:59:38

标签: laravel if-statement routes polymorphism many-to-many

所以我没有遇到很大的问题,但是我确实注意到了一些行不通的原因,并且无法解释原因。问题出在路线之内,因为我只是在学习和弄清多态关系,而其他方面则没有。

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

这是我的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()函数的原因吗?

2 个答案:

答案 0 :(得分:0)

我知道它可以与类似的收集方法一起使用。感谢Vaida Lungis建议在这里使用laravel的收集方法:https://laravel.com/docs/5.6/collections#method-isempty

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.";
}

也希望有人可以在底部回答我问题的其他一小部分。

答案 1 :(得分:0)

您是否尝试过使用isEmpty()? AFAIK它应该返回Collection实例,所以简单的空不会削减它Laravel 5.6 collections method-isempty而是尝试一下,看看是否有帮助;)或针对您的情况isNotEmpty

  

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

因为集合是一个对象,所以变量不是empty 因此,Collection对象具有函数isEmpty() isNotEmpty()