【问题标题】:Laravel 5.1 ManyToMany tags on blogs not working博客上的 Laravel 5.1 多对多标签不起作用
【发布时间】: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


    【解决方案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) }} 会很有用。
    • 该死的。我正在整理博客表,所以转储只有相关字段,并发现了一个名为“标签”的字段……我花了几个小时才发现这一点。删除它,问题就解决了。太蠢了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2017-01-07
    • 2019-08-06
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    相关资源
    最近更新 更多