博客上的 Laravel 5.1 多对多标签不起作用
Posted
技术标签:
【中文标题】博客上的 Laravel 5.1 多对多标签不起作用【英文标题】:Laravel 5.1 ManyToMany tags on blogs not working 【发布时间】: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 安装。我在这里错过了什么?
【问题讨论】:
【参考方案1】:尝试将$blog
变量直接传递给view()
函数
class BlogController extends Controller
public function show($id)
$blog = Blog::find($id);
return view('welcome', ['blog' => $blog]);
【讨论】:
未定义变量:博客(查看:/var/www/vue.nl/resources/views/welcome.blade.php)。考虑到更改方法名称有效,这似乎也不合逻辑。 我的错:在view()
函数中将$blog
替换为['blog' => $blog]
我已经这样做了 ;-) 仍然是原来的问题:foreach() 提供的参数无效(查看:/var/www/vue.nl/resources/views/welcome.blade.php)
好的,让我们分析变量。你能告诉我你认为 $blog 的 var_dump 吗? var_dump($blog)
和 var_dump($blog->tags)
会很有用。
该死的。我正在整理博客表,所以转储只有相关字段,并发现了一个名为“标签”的字段……我花了几个小时才发现这一点。删除它,问题就解决了。太蠢了!以上是关于博客上的 Laravel 5.1 多对多标签不起作用的主要内容,如果未能解决你的问题,请参考以下文章