繁体   English   中英

多对多关系中的 Laravel 查询构建器

[英]Laravel Query builder in many to many Relationship

让我们考虑一下,我有一个名为Sportman的模型和另一个通过pivot表链接的Sport多对多关系。

他们迁移的示例代码。

# Sportmans migration
Schema::create('sportsmans', function (Blueprint $table) {
    $table->increments('id');
    $table->string('firstname');
    $table->string('lastname');
});

# Sports migration
Schema::create('sports', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('description');
});

这是他们在模型中的关系:

# Defining association in Sportsman model
public function sports(){
    return $this->belongsToMany( Sport::class, 'sportsman_has_sports', 'person_id', 'sport_id' );
}

# Defining association in Sports model
public function sportsman(){
    return $this->belongsToMany( Sportsman::class );
}

我怎样才能将 Laravel 与 Eloquent 结合使用来获得玩的sportsman

  1. 只有“足球”
  2. 盒子或“游泳”
  3. 无论是“网球还是篮球

这是我尝试为问题 2 做的事情:

Sportsman::with(['sports:person_id,id,name'->whereHas('sports', function ($query) {
    $query->whereIn('name', ['Box', 'Swimming'] );
});

最难的是问题3

您将子查询放在具有功能的地方...

Sportsman::whereHas('sports', function ($query) {
    $query->whereIn('name', ['Box', 'Swimming'] );
})
->with('sports')
->get();
// Below is your last question
Sportsman::where(function ($query) {
    $query->whereHas('sports', function ($subquery) {
        $subquery->where('name', 'Tennis');
    });
    $query->whereHas('sports', function ($subquery) {
        $subquery->where('name', 'Basket-ball');
    });
})
->with('sports')
->get();

你是如何处理第一个案例的?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM