在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
表中的列。相反,slug
是topics
表中的一列,它通过名为skills
的透视表(包括skills_topics
和{skill_id
与topic_id
表相关联。 {1}})。
我尝试过多种变体,但我无法正确查询。 如果我想获得某个特定主题的所有技能,那么查询必须如何?
模型是:
class Skill extends Eloquent {
public function topics()
{
return $this->belongsToMany( 'Topic' );
}
}
和
class Topic extends Eloquent {
public function skills()
{
return $this->belongsToMany( 'Skill' );
}
}
答案 0 :(得分:2)
如果我理解正确,你应该真正获得相关技能的主题。像这样:
$topic = Topic::with('skills')->where('slug', $topicSlug)->first();
通过以下方式获取技能:
foreach ($topic->skills as $skill) { }