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

Php Laravel:查找数据透视表记录是否存在,php,laravel,eloquent,pivot-table,Php,Laravel,Eloquent,Pivot Table,我有两个模型,它们由透视表连接,User和Task 我有一个用户id和一个任务id 检查此用户和任务组合是否存在记录的最简单方法是什么?您可以搜索此记录吗 $users = User::has('task')->get(); 根据你的情况,你有几个选择 如果您已经有一个用户实例,并且希望查看它是否有具有特定id的任务,则可以执行以下操作: $user = User::find(1); $hasTask = $user->tasks()->where('id', $taskId

我有两个模型,它们由透视表连接,
User
Task

我有一个
用户id
和一个
任务id


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

您可以搜索此记录吗

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

根据你的情况,你有几个选择

如果您已经有一个
用户
实例,并且希望查看它是否有具有特定id的任务,则可以执行以下操作:

$user = User::find(1);
$hasTask = $user->tasks()->where('id', $taskId)->exists();
如果您有
任务
实例并希望检查用户,则可以反转此操作:

$task = Task::find(1);
$hasUser = $task->users()->where('id', $userId)->exists();
如果您只有ID,而没有每个ID的实例,则可以执行以下操作:

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

您可以使用以下代码:

$user = User::find(1);

$hasTask = $user->tasks()->where('task_id', $taskId)->exists();

你也可以试试这个,这个在Laravel 5.7中工作

$user = User::find(1);
$hasTask = $user->tasks->contains($taskId);
但更好的办法是

$hasTask = $user->tasks()->where('tasks.id', $taskId)->exists();

我最容易阅读的是:

$user->tasks()->exists();

我希望这将是解决方案@patricus,看来你能帮我。请注意:避免执行is-这将检索某个用户的所有任务,将它们放入内存,然后检查$taskId是否在内存中。@Eduardo是的,人们应该更喜欢使用即时加载或关系查询而不是集合来检查此项。@Eduardo我已更新了答案,我认为这样会更好。