Laravel 4中的多对多关系

时间:2013-04-05 13:15:16

标签: php many-to-many where laravel 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显然不是skills表中的列。相反,slugtopics表中的一列,它通过名为skills的透视表(包括skills_topics和{skill_idtopic_id表相关联。 {1}})。

我尝试过多种变体,但我无法正确查询。 如果我想获得某个特定主题的所有技能,那么查询必须如何?


模型是:

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

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

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你应该真正获得相关技能的主题。像这样:

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

通过以下方式获取技能:

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