【发布时间】:2015-11-25 09:43:42
【问题描述】:
我有一个非常非常奇怪的问题。
我尝试做的是在我的博客文章上创建标签。因此我使用了多对多关系。
这是全新安装的 Laravel 5.1:
routes.php
Route::get('/{id}', 'BlogController@show');
模型
博客.php
class Blog extends Model
{
public $timestamps = false;
public function tags()
{
return $this->belongsToMany('App\Tag');
}
}
Tag.php
class Tag extends Model
{
public function blogs()
{
return $this->belongsToMany('App\Blog');
}
}
控制器
BlogController.php
class BlogController extends Controller
{
public function show($id)
{
$blog = Blog::find($id);
return view('welcome', compact('blog'));
}
}
Welcome.blade.php
<h1>{{ $blog->title }}</h1>
<h2>Tags</h2>
@foreach($blog->tags as $tag)
<p>{{$tag->name}}</p>
@endforeach
创建所有必需的表(博客、标签、blog_tag)并创建一些帖子和标签,并在 blog_tag 中设置(附加)关系。
当我运行它时,我得到了这个错误
Invalid argument supplied for foreach() (View: /var/www/vue.nl/resources/views/welcome.blade.php)
这似乎与 $blog->tags 有关。如果我将其更改为 $blog->tagss 并将 Blog.php 中的方法名称更改为标签( public function tags() )它工作完美......
我不明白。我知道我可以简单地将其更改为标签或其他内容,但我在这里遵循简单的教程,所以这应该可以吗?
“标签”是保留字还是我看不到的其他内容?同样,这是一个全新的 Laravel 安装。我在这里错过了什么?
【问题讨论】:
标签: php orm tags many-to-many laravel-5.1