拉拉维尔"Invalid argument supplied for foreach()"



我正在学习 laravel,在更新标签代码后,我的标签有问题。当我点击标签时,我遇到了这个问题:

外观\点火\异常\视图异常 提供的参数无效 foreach(( (view: C:\blog\resources\views\articles\index.blade.php(

我在控制器中的代码:

<?php
namespace AppHttpControllers;
use AppArticle;
use AppTag;
use IlluminateHttpRequest;
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

这是标签雄辩:

<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Tag extends Model
{
public function article()
{
return $this->belongsToMany(Article::class);
}
}

错误指出文章数组为空。

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

@if(!empty($articles))
@foreach ($articles as $article)
@endforeach
@endif

这不是获取文章的正确方法。我建议您使用在哪里必须检查标签。

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

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

你应该修复你们的关系:

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

最新更新