为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel“为 foreach() 提供的参数无效”

Laravel“为 foreach() 提供的参数无效”

PHP
慕慕森 2023-04-02 14:59:53
我正在学习 laravel,更新标签代码后标签出现问题。当我点击标签时,我遇到了这个问题:Facade\Ignition\Exceptions\ViewException 为 foreach() 提供的参数无效(视图:C:\blog\resources\views\articles\index.blade.php)我在控制器中的代码:<?phpnamespace App\Http\Controllers;use App\Article;use App\Tag;use Illuminate\Http\Request;class ArticlesController extends Controller{public function index(){    if(request('tag'))    {        $articles = Tag::where('name', request('tag'))->firstOrFail()->articles;    }     else     {        $articles = Article::latest()->get();    }    return view ('articles.index',['articles' => $articles]);}展示页面@foreach ($articles as $article )            <div class="content">                <div class="title">                    <h2>                        <a href="/articles/{{$article->id}}">                            {!! $article->title !!}                        </a>                    </h2>                </div>                <p>                <img src="/images/banner.jpg" alt="" class="image image-full"/>                </p>                {!! $article->exceprt!!}            </div>        @endforeach这是雄辩的标签:<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Tag extends Model{public function article(){    return $this->belongsToMany(Article::class);}}
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

该错误表明文章数组为空。


您需要添加条件来检查数组是否为空。


@if(!empty($articles))

@foreach ($articles as $article)

@endforeach

@endif

这不是获取文章的正确方法。我建议你使用 whereHas 检查标签。


查看完整回答
反对 回复 2023-04-02
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

articles在标签模型中的关系未定义。因此,当您打电话时,Tag::where('name', request('tag'))->firstOrFail()->articles您得到的不是 Collection 而是null.

这就是您收到此错误的原因,因为您无法循环访问null变量。

你应该修复你的关系:

public function articles() // <---- You were missing the 's'{  
  return $this->belongsToMany(Article::class);
}


查看完整回答
反对 回复 2023-04-02
  • 2 回答
  • 0 关注
  • 188 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信