可以加载相关查询

时间:2018-05-02 19:35:16

标签: laravel eloquent

我现在正拉着头发,我无法弄清问题是什么。

这是我的设置:

得分模型 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并想知道是否有一些我缺少的东西才能加载相关的查询?

1 个答案:

答案 0 :(得分:0)

从您的查询判断,您似乎希望通过ScoreTag模型选择Score模型所具有的所有Tag模型。在关系定义中进行连接和自定义选择不会像那样工作。

您最好尝试使用hasManyThrough关系来实现此功能。

function tags()
{
    return $this->hasManyThrough(Tag::class, ScoreTag::class);
}