環境
- php:8.1
- laravel:9.23.0
対象
- laravelでwithを使っていてその中でRequestの値を条件として使いたい人
前提
- usersテーブルはcompaniesテーブルとリレーションされている状態
方法
- ダメなパターン
これだとRequestが使えない状態になっています
UserController.php
<?php
declare(strict_types=1);
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function getSearchUsers(Request $request)
{
$query = User::query()->with(['company'])->whereHas('company', function ($query) {
$company_id = $request->query('company_id');
$query->where('companies.company_id', '=', $company_id);
});
return $query->get();
}
}
- OKなパターン
変更点は function ($query) use ($request) { の所です
UserController.php
<?php
declare(strict_types=1);
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function getSearchUsers(Request $request)
{
$query = User::query()->with(['company'])->whereHas('company', function ($query) use ($request) {
$company_id = $request->query('company_id');
$query->where('companies.company_id', '=', $company_id);
});
return $query->get();
}
}
まとめ
useを使用することで親スコープの変数を使うことができる