【问题标题】:Invalid argument supplied for foreach() in Laravel 5.1Laravel 5.1 中为 foreach() 提供的参数无效
【发布时间】:2015-10-05 08:04:54
【问题描述】:

一切正常,我不知道发生了什么。我收到此错误:

为 foreach() 提供的参数无效。

我正在尝试获取像@foreach($post->tags as $tag) 这样附加到帖子的标签,如果我这样做var_dump,那么如果我使用@if(is_array($post->tags)) 执行此操作,它会显示string(0)"" - 没有错误也没有标签。我不知道问题出在哪里,因为这些类别是按照相同的原则制作的,而且它们运行良好。

这是 Post.php 模型代码:

public function tags()
{
    return $this->belongsToMany('App\Tag');
}

public function getTagListAttribute()
{
    return $this->tags->lists('id')->all();
}

这是 Tag.php 模型代码:

public function post()
{
    return $this->belongsToMany('App\Post');
}

【问题讨论】:

  • $post->tags 不包含任何值。

标签: php laravel foreach


【解决方案1】:

对于这种情况,您可以使用一个简单的调用:

@forelse($users as $user)
 <li>{{ $user->name }}</li> 
@empty 
<p>No users</p> 
@endforelse

在你给出低效率的答案之前,请查看官方文档。

【讨论】:

  • 感谢您指出这一点。这是一种更容易的方式。我建议使用此解决方案而不是我的解决方案!
【解决方案2】:

如果没有标签,则$post-&gt;tags 为空,因此 @foreach($post-&gt;tags as $tag) 会抛出错误。

您可以在foreach之前检查@if(!empty($post-&gt;tags)):是否有此帖子的标签以避免错误消息。

如果这篇文章应该有标签但没有标签,那么您的$post-&gt;tags 没有正确填充数据。

【讨论】:

  • 但这怎么会发生呢?表格都是正确的。哦,天哪,我没有看到帖子表中有“标签”字段。我删除了它,现在一切正常!
  • 那么请考虑使用@mimo 发布的答案(并将其标记为解决方案),因为它比我的代码更酷且可读性更好。
【解决方案3】:

当您的数组为空且不包含任何元素时,foreach 将抛出该异常。 为了安全起见,您可以改用普通的 for(....)

【讨论】:

    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 2015-06-29
    • 2017-02-15
    • 2017-05-03
    • 1970-01-01
    • 2022-01-27
    • 2018-02-26
    • 2017-11-26
    相关资源
    最近更新 更多