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

时间:2016-02-09 07:08:22

标签: php laravel eloquent pivot-table

我有两个模型,它们通过数据透视表UserTask加入。

我有一个user_id和一个task_id

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

5 个答案:

答案 0 :(得分:28)

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

如果您已经有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();

答案 1 :(得分:3)

你可以搜索这个吗?

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

答案 2 :(得分:2)

您也可以尝试一下,这在Laravel 5.7中有效

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

答案 3 :(得分:0)

对我来说最容易阅读的是:

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

答案 4 :(得分:-3)

您可以使用以下代码:

$user = User::find(1);

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