(Laravel4)正在尝试打印标签
我刚接触laravel和php,很难理解“关系” 我正在尝试向数据库中的每个教程添加标记(可以看作是帖子) 当我试图打印出一个教程的所有标签时,我只得到一个标签,而我有两个标签 控制器:(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
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