Laravel готов загружать отношения с, где пункт не работает - PullRequest
0 голосов
/ 23 июня 2019

Я хочу загрузить пользователей, у которых есть company_id = 28. Я помещаю предложение where, но оно не работает, коллекция возвращает все записи.

MyController.php

public function index($type, $company_id = '')
{
    $user = User::whereHas('roles', function ($query) use ($type) {
        $query->where('name', '=', $type);
    })->get();

    $users = $user->load(['userSetting' => function ($query) {
        $query->where('company_id', '28');
    }]);

    return response()->json($users);
}

User.php

public function userSetting()
{
   return $this->hasOne('App\UserSettings', 'user_id');
}

1 Ответ

0 голосов
/ 23 июня 2019

Вы можете использовать filter :

Метод filter фильтрует коллекцию, используя заданный обратный вызов, сохраняя только те элементы, которые проходят данный тест на истинность.

Например:

$collection = collect([1, 2, 3, 4]);
$filtered = $collection->filter(function ($value, $key) {
    return $value > 2;
});
$filtered->all(); // [3, 4]

Внутри вашего контроллера:

public function index($type, $company_id = '')
{
    $users = User::whereHas('roles', function ($query) use ($type) {
        $query->where('name', '=', $type);
    })->get();

    //If you want to load the relationship with the users:
    /*
    $users = User::whereHas('roles', function($query) use ($type) {
        $query->where('name', '=', $type)
    })
        ->with('userSettings')
        ->get()
    */

    $users = $users->filter($user){
        return $user->userSettings->company_id == 28;
    }

    return response()->json($users);
}

Надеюсь, это поможет.

...