2013-04-05 135 views
0

在Laravel 4,与许多一对多关系工作时,我想做到以下几点:多对多的关系,其中Laravel 4

/* get all skills for one specific topic */ 
Route::get('/api/topics/{topicSlug}/skills', function($topicSlug) 
{ 
    $skills = Skill::where('topic.slug', '=', $topicSlug)->get(); 
} 

现在的问题是,topic.slug明显ISN” t表格skills中的一列。相反,slugtopics表中的一列,其通过名为skills_topics(其中包括skill_idtopic_id)的数据透视表与skills表相关。

我试过一些变化,但我只是无法得到正确的查询。 如果我想获得某个特定主题的所有技能,查询如何看起来像?


的车型有:

class Skill extends Eloquent { 
    public function topics() 
    { 
     return $this->belongsToMany('Topic'); 
    } 
} 

class Topic extends Eloquent { 
    public function skills() 
    { 
     return $this->belongsToMany('Skill'); 
    } 
} 

回答

2

那么你实际上应该与相关的技能得到了话题,如果我理解正确的。事情是这样的:

$topic = Topic::with('skills')->where('slug', $topicSlug)->first(); 

和接入的技能通过:

foreach ($topic->skills as $skill) { } 
+0

你需要改变'topic.slug'只是'slug'。现在,要获得包含属于$ topic的所有技能的json响应,我只需要执行'return $ topic-> skills;'。我正在接近完全错误的方式。非常感谢,真的帮助:) – Ben 2013-04-05 13:50:29

+0

是的,我复制/粘贴你的部分;) – bstrahija 2013-04-05 15:07:05