Laravel:查找是否存在数据透视表记录

dat*_*dan 16 php pivot-table laravel eloquent

我有两个模型,由一个数据透视表连接,UserTask.

我有一个user_id和一个task_id.

检查用户和任务组合是否存在记录的最佳方法是什么?

pat*_*cus 32

根据您的具体情况,您有几种选择.

如果您已经有一个User实例,并且想要查看它是否具有具有特定ID的任务,您可以执行以下操作:

$user = User::find(1);
$hasTask = $user->tasks()->where('id', $taskId)->exists();
Run Code Online (Sandbox Code Playgroud)

如果您有Task实例并想要检查用户,则可以撤消此操作:

$task = Task::find(1);
$hasUser = $task->users()->where('id', $userId)->exists();
Run Code Online (Sandbox Code Playgroud)

如果你只有id,没有每个的实例,你可以执行以下操作:

$hasPivot = User::where('id', $userId)->whereHas('tasks', function ($q) use ($taskId) {
        $q->where('id', $taskId);
    })
    ->exists();
Run Code Online (Sandbox Code Playgroud)


Yur*_*ich 5

你可能会搜索这个吗?

$users = User::has('task')->get();
Run Code Online (Sandbox Code Playgroud)


Pra*_*ahu 5

你也可以试试这个,这在 Laravel 5.7 中有效

$user = User::find(1);
$hasTask = $user->tasks->contains($taskId);
Run Code Online (Sandbox Code Playgroud)

但更好的方法是

$hasTask = $user->tasks()->where('tasks.id', $taskId)->exists();
Run Code Online (Sandbox Code Playgroud)