ピボットテーブルで結合された2つのモデル、User
とTask
があります。
user_id
とtask_id
。
このユーザーとタスクの組み合わせのレコードが存在するかどうかを確認する最も簡単な方法は何ですか?
状況に応じて、いくつかのオプションがあります。
User
インスタンスが既にあり、特定のIDのタスクがあるかどうかを確認する場合は、次のようにできます。
$user = User::find(1);
$hasTask = $user->tasks()->where('id', $taskId)->exists();
Task
インスタンスがあり、ユーザーを確認する場合は、これを元に戻すことができます。
$task = Task::find(1);
$hasUser = $task->users()->where('id', $userId)->exists();
それぞれのインスタンスがなく、IDがある場合は、次の操作を実行できます。
$hasPivot = User::where('id', $userId)->whereHas('tasks', function ($q) use ($taskId) {
$q->where('id', $taskId);
})
->exists();
これを試すこともできます。これはLaravel 5.7で動作しています
$user = User::find(1);
$hasTask = $user->tasks->contains($taskId);
これを検索してもいいですか?
$users = User::has('task')->get();