web-dev-qa-db-ja.com

Laravel:ピボットテーブルレコードが存在するかどうかを確認する

ピボットテーブルで結合された2つのモデル、UserTaskがあります。

user_idtask_id

このユーザーとタスクの組み合わせのレコードが存在するかどうかを確認する最も簡単な方法は何ですか?

20
datavoredan

状況に応じて、いくつかのオプションがあります。

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();
35
patricus

これを試すこともできます。これはLaravel 5.7で動作しています

$user = User::find(1);
$hasTask = $user->tasks->contains($taskId);
4

これを検索してもいいですか?

$users = User::has('task')->get();
4
Yurich