通过一对多关系检索多对多关系

时间:2016-09-25 08:07:52

标签: php laravel laravel-5 eloquent laravel-5.2

我有一张可以有一个用户的海报。海报可以有很多标签,标签可以有很多海报。现在,我想检索特定用户创建的海报中使用的所有不同标记。我正在使用laravel,因此,ORM是雄辩的。如果有人可以使用雄辩的方式为我提供解决方案,那将非常感激。我只想检索标签 User班级:

class User extends Model {
    public function posters() {
        return $this->hasMany(Poster::class);
    }
}

Poster班级:

class Poster extends Model {
    public function user() {
        return $this->belongsTo(User::class);
    }
    public function tags() {
        return $this->belongsToMany(Tag::class);
    }
}

Tag班级:

class User extends Model {
    public function posters() {
        return $this->belongsToMany(Poster::class);
    }
}

1 个答案:

答案 0 :(得分:1)

whereHas 方法允许按相关模型的属性搜索记录。它也适用于嵌套关系,因此您可以使用它来搜索给定用户使用的所有标记。

以下应该可以解决问题:

$tags = Tag::whereHas('posters.user', function($query) {
  $query->whereId($userId);
})->get();