博客上的 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' =&gt; $blog] 我已经这样做了 ;-) 仍然是原来的问题:foreach() 提供的参数无效(查看:/var/www/vue.nl/resources/views/welcome.blade.php) 好的,让我们分析变量。你能告诉我你认为 $blog 的 var_dump 吗? var_dump($blog) var_dump($blog-&gt;tags) 会很有用。 该死的。我正在整理博客表,所以转储只有相关字段,并发现了一个名为“标签”的字段……我花了几个小时才发现这一点。删除它,问题就解决了。太蠢了!

以上是关于博客上的 Laravel 5.1 多对多标签不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 多对多关系不起作用

Laravel Nova 多态多对多关系不起作用

Laravel 8 多对多关系不起作用(没有抛出错误)

Laravel 上的多对多问题关系

Laravel5.1 模型 --多对多关系

Laravel 同一模型上的多对多