拉拉维尔:查找数据透视表记录是否存在


Laravel: find if a pivot table record exists

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

我有一个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,而没有每个 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);

但更好的方法是

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

你可能在搜索这个?

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

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

$user->tasks()->exists();
您可以使用

以下代码:

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