如何获取已指定所有关联数据的数据

时间:2019-01-31 14:20:56

标签: php mysql laravel

我正在使用laravel构建应用。

我要做的是获取具有搜索条件中指定的所有资格的用户数据,并显示用户列表。

这是我的模型结构。

用户:

id  name
1   John
2   Jack

资格:

id   name
11   A
12   B
13   C

Quality_User:

qualification_id   user_id
11                 1
11                 2
12                 2
13                 2

如果设置搜索条件“ Quality 11,12,13”,

John只有11->未列出。

杰克具备所有资格->已列出

我想用laravel查询生成器来实现这一点,有什么办法吗?

User.php

public function qualifications()
{
  return $this->belongsToMany('App\Qualification');
}

控制器

$query = App\User::query();
// other condition
// ....

// the case listed if one condition is matched
// but, this is not what I want to do
$query->whereHas(
    'qualifications',
    function ($query) use ($conditions) { //$conditions = [11,12,13]
      $query->whereIn('qualifications.id', $qualifications);
    }
  );

1 个答案:

答案 0 :(得分:2)

在您的用户模型中:

public function qualifications()
{
    return $this->belongsToMany(
        Qualification::class,
        'qualification_user',
        'user_id',
        'qualification_id'
    );
}

然后在控制器中,假设您具有资格ID作为数组:

$query = User::query();
foreach($qualificationIds as $id) {
    $query->whereHas('qualifications', function ($q) use ($id) {
        $q->where('id', $id);
    });
}
$query->get();