Laravel 可以和不能加载相关查询

Laravel 可以和不能加载相关查询,laravel,eloquent,Laravel,Eloquent,我现在在胡思乱想,我想不出是什么问题 这是我的设置: 评分模型通过如下查询具有许多标记: class Score extends Model { ..... public function tags() { return $this->hasMany('App\ScoreTag', 'score_id') ->leftJoin('tags', 'score_tags.tag_id', '=', 'tags.tag_id')

我现在在胡思乱想,我想不出是什么问题

这是我的设置:

评分模型通过如下查询具有许多标记:

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.*');          
    } 
}
我使用这个包通过API url加载关系。从客户端使用 一切都很好,标签和分数一起包含和检索。但是当我尝试使用

Score::with('tags')->get();
…在后端,未提取标记。我在另一个项目中有一个类似的设置,效果很好

显示的结果没有如下所示的标记:

"tags": []

我目前使用的是laravel 5.4,我想知道是否有什么东西我在加载相关查询时遗漏了?

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

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

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

当您使用
App\ScoreTag
作为目标模型时,为什么您的关系查询只选择
tags
列?它不应该是
$this->有很多吗('App\Tag',…
?请参见下面的答案Hanks,但在使用Bruno软件包时,它正在工作…这就是为什么我有点困惑的原因。hasmanythrough在我之前尝试时不起作用。我将再次尝试。奇怪的是,标签实际上已提取,但在使用postman时,结果中不会显示。但是当我调用Score::find(1)时->它们实际上就在那里