我现在正拉着头发,我无法弄清问题是什么。
这是我的设置:
得分模型 hasMany 标记通过如下所示的查询:
class Score extends Model
{
.....
public function tags()
{
return $this->hasMany('App\ScoreTag', 'score_id')
->leftJoin('tags', 'score_tags.tag_id', '=', 'tags.tag_id')
->select('tags.*');
}
}
我使用https://github.com/esbenp/bruno包通过API网址加载关系。使用http://mockupurl/scores?includes[]=tags从客户端调用此方法时 一切正常,标签被包含在内并与分数一起检索。但是当我试图使用时......
Score::with('tags')->get();
...在后端,标签没有被提取。我在另一个项目中有类似的设置,工作正常。
显示的结果没有如下标签:
"tags": []
我目前正在使用laravel 5.4并想知道是否有一些我缺少的东西才能加载相关的查询?
答案 0 :(得分:0)
从您的查询判断,您似乎希望通过ScoreTag模型选择Score模型所具有的所有Tag模型。在关系定义中进行连接和自定义选择不会像那样工作。
您最好尝试使用hasManyThrough关系来实现此功能。
function tags()
{
return $this->hasManyThrough(Tag::class, ScoreTag::class);
}