在 Laravel 中搜索并获取特定用户

Searching and getting specific users in Laravel

我在用户之间有关系,我想搜索并从连接的用户那里获取集合。示例:

用户:

ID: 1 | Nikola - he is TRAINER
ID: 2 | Test - he is his client

客户培训师Table:

trainer_id | client_id | status
1          | 2         | 1

当trainer搜索特定用户时,我想只搜索状态为1并且他们之间有关系的用户。

这是我当前的代码:

if(isset($_GET['type'])){
    $names = explode(" ", $_GET['type']);
    $klijenti = User::where(function($query) use ($names) {
    $query->whereIn('name', $names);
    $query->orWhere(function($query) use ($names) {
        $query->whereIn('surname', $names);
    });
  })->orderBy("last_seen","DESC")->get();
  print_r($klijenti);
  if(empty($_GET['type'])){
    $klijenti = $user->allclients;
  }
}

我不知道我是否完全理解您的要求,但这是一种利用关系的解决方案:

将此添加到您的 User 模型中。这假设您的“ClientTrainer”Table 被称为 client_trainers。

public function clients()
{
    return $this->belongsToMany('App\User', 'client_trainers', 'trainer_id', 'client_id')
        ->wherePivot('status', 1);
}

选项 1

现在您应该能够执行这样的查询,假设 Auth::user() return 当前登录的培训师:

$clients = Auth::user()->clients()->whereIn('name', $names)
    ->orWhereIn('surname', $names)
    ->orderBy("last_seen","DESC")->get();

或者让一个培训师的所有客户只做类似的事情

$clients = Auth::user()->clients()->get();

选项 2

如果你想独立于单个训练师进行搜索,你可以这样做:

$clients = User::has('clients')
    ->whereIn('name', $names)
    ->orWhereIn('surname', $names)
    ->orderBy("last_seen","DESC")->get();

第一部分 User::has('clients') 应该只有 return 用户在 client_trainers table.[=18= 中至少有 status = 1 的客户端]