(Laravel4)正在尝试打印标签

(Laravel4)正在尝试打印标签,laravel,many-to-many,Laravel,Many To Many,我刚接触laravel和php,很难理解“关系” 我正在尝试向数据库中的每个教程添加标记(可以看作是帖子) 当我试图打印出一个教程的所有标签时,我只得到一个标签,而我有两个标签 控制器: public function index() { $tags = Tutorial::where('id', '=', 1)->first()->tags()->get(); //$tags = $tutorial->tags()->get(); re

我刚接触laravel和php,很难理解“关系”

我正在尝试向数据库中的每个教程添加标记(可以看作是帖子)

当我试图打印出一个教程的所有标签时,我只得到一个标签,而我有两个标签

控制器:

public function index()
{
    $tags = Tutorial::where('id', '=', 1)->first()->tags()->get();
    //$tags = $tutorial->tags()->get();


    return View::make('home', array(
        'tags' => $tags
    ));
}
教程模型:

class Tutorial extends Eloquent {
    protected $table = 'tutorials';

    public function tags() {
        return $this->belongsToMany('Tag', 'tutorials_tags', 'tag_id');
    }
}
标签型号:

class Tag extends Eloquent {
    protected $table = 'tags';
    public function Tutorials() {
        return $this->belongsToMany('Tutorial', 'tutorials_tags', 'tutorial_id');
    }
}
视图:

我的数据库如下所示:


我认为是您的循环造成了问题,您正在用循环数组中的一项替换数组:

@foreach($tags作为$tags)
{{$tags->name}
@endforeach
尝试将其更改为:

@foreach($tags作为$tag)
{{$tag->name}
@endforeach

更新:另一个问题是您引用了错误的外键

在多对多关系中,当您使用
$this->belongtomany()
时,请求外键的第三个参数基本上是询问“pivot表的哪一列,aka.
tutorials\u tags
表应该与此
Tutorial
模型匹配?”。当然应该是这样
教程\u id

在您的例子中,当您在教程的
tags()
方法中指定
tag\u id
时,它会使Laravel认为
tag\u id
是您的教程id,这是错误的<代码>教程应作为
教程id
在透视表中查找

因此,您的
公共函数标记()
实际上需要:

public函数标签(){
返回$this->belongtomany('Tag','tutorials_tags','tutorials_id');
}
或者,如果您查看Laravel源代码,它会:

$foreignKey=$foreignKey?:$this->getForeignKey();
并且
getForeignKey()
返回snake\u大小写(class\u basename($this))“\u id”
返回
“tutorial\u id”

由于您已经符合Laravel命名表和外键的标准,因此可以省略第三个参数,如下所示:

public函数标签(){
返回$this->belongtomany('Tag','tutorials_tags');
}
这与
$otherKey
相同,它询问“pivot表的哪一列,aka.
tutorials\u tags
表应该与
Tag
模型匹配?” 所以它应该是
标签id

我们已经完成了
教程
模型。现在,让我们应用于
标记
模型。所以在
标签中
模型应该是:

公共函数教程(){
返回$this->belongtomany('Tutorial','tutorials\u tags','tag\u id');
}

没有,它仍然只打印一个标签,而我分配了两个标签。:-\感谢thoTry
$this->belongtomany('Tag'、'tutorials\u tags'、'tutorials\u id')
$this->belongtomany('Tag','tutorials_tags','tutorials_id','Tag_id')在教程中::tags()。这似乎说明了什么。哈哈,这两个都管用。我还是不知道我在做什么谢谢。。我正在更新答案,并将解释原因。:)谢谢兄弟,那太棒了。:)
@foreach($tags as $tags)
    {{$tags->name}}
@endforeach